android游戏开发之我的小小游戏2——连连看游戏2之绘制基本的界面及触摸相关

通过PieceManager获得的一个9*9的二维方块Piece类的数组,其中我们值绘制1-8的格子,因为最外层的格子我们将会用来,画线,效果如下图


现在我们可以通过这个数组来绘制基本的界面了

我们会使每一块的小方块之间有6个像素点的距离

绘制的代码如下

protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		
		canvas.drawBitmap(background, 0, 0, null);

		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++) {
				
				if(pieces[i][j] != null)
				{
					Bitmap curImage = pieces[i][j].getImage();
					canvas.drawBitmap(curImage, startX + betweenLength/2 + i * (pieceWidth + betweenLength),
							startY + betweenLength/2 + j * (pieceHeight + betweenLength), null);
				}
			}
		}
现在主要就是判断,我们到底点击的是哪一个图片了,首先我们根据点击的范围获得点击的方块是数组中的哪一个元素,并对该点击的方块进行一系列的处理。我们会用一个长度为2的一维数组lastClick记录我们上一次点击的方块在我们的二维数组中的脚标,如果我们是刚开局,或是已经消去了两个时,我们会把上次点击的记录lastClick设置成初始化的值,lastClick中的两个元素的值均为-1,否则,就把我们刚才点击的方块的脚标赋值给lastClick,当我们再次点击一个方块区域时,我们会根据此次点击的区域的脚标来获取在这个位置上Piece以获取该位置上图片的Id,然后对比上次点击的方块区域中的图片Id是否和本次的Id一样,如果一样,就消去,否则,lastClick就变为当前点击的位置

public boolean onTouchEvent(MotionEvent event) {

		float touchX = event.getX();
		float touchY = event.getY();
		
		//当点击在图片区域才会有响应
		if(touchX > startX && touchX < startX+(pieceWidth+betweenLength)*columnNum && touchY > startY && touchY < startY+(pieceHeight+betweenLength)*rowNum)
		{
			int x = (int)((touchX-startX)/(pieceWidth+betweenLength));
			int y = (int)((touchY-startY)/(pieceHeight+betweenLength));
			
			
			//首先判断点击的位置不是已经消失了的图片的位置
			if(pieces[x][y] != null)
			{
				//如果是刚开始玩或者已经销毁了一对
				if(lastClick[0] == -1 && lastClick[1] == -1)
				{
					lastClick[0] = x;
					lastClick[1] = y;
				}
				else
				{
					//两次点击的不是同一张图片
					if(x != lastClick[0] || y != lastClick[1])
					{
						//若果两个图片相同
						if(pieces[x][y].getId() == pieces[lastClick[0]][lastClick[1]].getId())
						{
							pieces[x][y] = null;
							pieces[lastClick[0]][lastClick[1]] = null;
							
							lastClick[0] = -1;
							lastClick[1] = -1;
							
							invalidate();
						}//如果两次点击的图片不相同,则把此次点击的方块的位置赋值给lastClick
						else if(pieces[x][y].getId() != pieces[lastClick[0]][lastClick[1]].getId())
						{
							lastClick[0] = x;
							lastClick[1] = y;
						}
					}
				}
			}
		}
		else
			System.out.println("哥们点跑偏了!... ...");
		
		return super.onTouchEvent(event);
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值