Android开发入门——推箱子游戏开发实战(十)

指挥搬运工走动

  本文是系列文章第十篇,讲如何在推箱子游戏程序中实现下述功能:玩家用手指触摸屏幕来指挥搬运工走动。系列文章第九篇“绘制游戏区域”是本文的前提。在第九篇中,我们在游戏界面上绘制了游戏区域(即二维网格)和搬运工,如图1所示。
  Android开发入门——推箱子游戏开发实战(十)_第1张图片
  图1  系列文章第九篇达成的效果
  
本文目标
  玩家指挥搬运工走动的功能,描述如下:
   1. 当玩家手指触摸搬运工的上方(下方、左侧、右侧)单元格,则搬运工将走到上方(下方、左侧、右侧)单元格。如图2所示。
  2. 不允许出边界。
  3. 玩家触摸到搬运工上方(下方、左侧、右侧)单元格之外的区域,则视为无效指令,搬运工不走动。
Android开发入门——推箱子游戏开发实战(十)_第2张图片

你将学到的知识内容
  1. 利用回调函数onTouchEvent处理屏幕触摸事件。
  2. 利用invalidate或postInvalidate方法刷新视图。

实现思路
  在游戏界面,玩家触摸手机屏幕的时候,将引发Android系统执行onTouchEvent回调函数,在此回调函数内执行以下工作:
  1. 判断触摸位置是否落在搬运工的上方(下方、左侧、右侧)单元格。
  2. 若是,则修改搬运工的位置到上方(下方、左侧、右侧)单元格;要求重新绘制画面。游戏画面重新绘制后,玩家将看到搬运工走动了。
  
  那么,如何判断触摸位置是否落在搬运工的上方(下方、左侧、右侧)单元格呢?以判断是否落在上方单元格为例,答案是:
  1. 记住搬运工当前所处的单元格(记作(mManRow, mManColumn),也就是说搬运工处在mManRow行mManColumn列)。
  2. 我们知道,每一单元格是一个正方形,记它的宽度为mCellWidth。搬运工上方单元格的矩形区域above的左上角是:
    1) 左端:mManColumn * mCellWidth
    2) 上端:(mManRow – 1) * mCellWidth
上方单元格的矩形区域above的右下角是:
    3) 右端:(mManColumn + 1) * mCellWidth
    4) 下端:mManRow * mCellWidth
  3. 获取通过onTouchEvent回调函数的参数传入的触摸位置(touch_x, touch_y)。
  4. 如果触摸位置(touch_x, touch_y)落在上方单元格above内,则得出“是”的结论,否则得出“否”的结论。

  类似地,我们可以判断触摸位置是否落在搬运工下方(below)、左侧(left)、右侧(right)的单元格内。

实现步骤
我们遵循以下步骤来实现游戏界面上玩家指挥搬运工走动功能:
1. 实现搬运工向下走动。
2. 实现搬运工向右走动。
3. 禁止搬运工走出边界。
4. 搬运工向上、向左走动功能留作作业。

  我精心准备了《编写推箱子游戏程序(第五步)》一文(Word文档格式,共9页),详细讲解了实现步骤,给出了实现代码,敬请下载阅读。

学习Android开发,要做的就是实践、实践、再实践。祝好运!

你可能感兴趣的:(Android开发,android开发,游戏界面,触摸事件)