andriod游戏开发 第四章 响应用户事件

andriod游戏开发 第四章 响应用户事件

ID:27171230

大小:56.33 KB

页数:6页

时间:2018-12-01

andriod游戏开发 第四章 响应用户事件_第1页
andriod游戏开发 第四章 响应用户事件_第2页
andriod游戏开发 第四章 响应用户事件_第3页
andriod游戏开发 第四章 响应用户事件_第4页
andriod游戏开发 第四章 响应用户事件_第5页
资源描述:

《andriod游戏开发 第四章 响应用户事件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第四章响应用户事件上一章介绍了如何显示文字和图片,一般来说,下一步就该讲到动画了。可是我们前面说了,使用View不是最终的选择,要实现动画还需要很多复杂的代码。相对来说,学习如何响应用户事件要简单些。本章前半部分讲解按键事件的响应,但是这也不是最终方案,因为实际上的手机可能没有硬键盘,需要使用虚拟键盘,所以后半部分我们会讲解虚拟键盘的设计和实现。同绘图一样,View也是通过回调函数来响应用户事件的。键盘事件的回调函数有多个,以对应不同的事件,我们暂时只用到onKeyDown,对应按键被按下的事件,其他函数以后用到再介绍。让我们重载onKeyDown(重载一个函数

2、的方法前面章节有介绍):@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){//TODOAuto-generatedmethodstubreturnsuper.onKeyDown(keyCode,event);}onKeyDown有两个参数:keyCode和event,通过keyCode能判断是哪个键被按下,event比较复杂,包含了这次按键更多的信息,我们暂时先不考虑它。现在我们要通过按键控制主角向四个方向移动。所谓移动,就是将主角的图像在不同的位置显示出来,也就是改变函数drawBitmap中的

3、第二、第三个参数。比如用户按下右方向键,我们就把横坐标增加,这样下次显示出来的时候,主角就会往右一点。为了节约时间,我们就把刚刚显示的图片BattleCity作为主角好了。首先定义两个全局变量x和y,然后在onKeyDown中改变x、y的值,然后重绘View。因为代码没有什么难度,所以不做讲解了。publicclassGameViewextendsView{intx=0,y=0;……@OverrideprotectedvoidonDraw(Canvascanvas){……canvas.drawBitmap(bmp,x,y,newPaint());}@Overri

4、depublicbooleanonKeyDown(intkeyCode,KeyEventevent){//TODOAuto-generatedmethodstubswitch(keyCode){caseKeyEvent.KEYCODE_DPAD_UP:y-=10;break;caseKeyEvent.KEYCODE_DPAD_DOWN:y+=10;break;caseKeyEvent.KEYCODE_DPAD_LEFT:x-=10;break;caseKeyEvent.KEYCODE_DPAD_RIGHT:x+=10;break;}postInvalidate(

5、);//通知系统重绘Viewreturnsuper.onKeyDown(keyCode,event);}}完成后我们肯定很想测试一下,但是此时你会发现,按键根本没有任何反应。这就是我们要特殊指出的地方。View被显示时,缺省情况下没有获得焦点,就是说,按键动作没有发送给View,所以需要在构造函数中增加一句publicGameView(Contextcontext){……setFocusable(true);}再运行程序,看看图片是否按照我们的指令运动起来了。前面说过,很多手机没有硬键盘,所以我们需要一个软键盘的解决方案。软键盘就是在屏幕上显示一个键盘,然后响应

6、用户的触摸屏操作,模拟成键盘操作。对于坦克大战,我们只需要在屏幕上显示一个模拟的游戏手柄(显示图片的方法大家没有忘记吧,显示位置可以根据模拟器自行调整):在用户触摸模拟手柄上的方向键和开火键时进行相应的操作。我们拿方向键做演示,步骤如下:首先确定四个方向键在屏幕上的区域(上图的红色方框),然后在触摸屏事件的响应函数中判断事件是否发生在方向键区域中,最后如果事件发生在区域中进行相应的操作。下面,我们引入一个非常有用的类Rect(RectF与Rect基本相同,不过以float作为坐标参数),rect是rectangle的简写,顾名思义,这个类代表了一个矩形。Rect

7、通过矩形4个边来定义这个矩形的范围。他们分别是left,right,top,bottom,如图所示:转化为屏幕坐标,top是矩形坐上角的纵坐标,left是矩形坐上角的横坐标,right是矩形右下角的横坐标,buttom是右下角的纵坐标。有了Rect我们就可以方便的表示虚拟手柄各个键的位置。同时Rect还提供了一些很有用的函数,其中Rect.contains(x,y)能够判断点(x,y)是否在矩形框中,正好是我们需要的。现在我们就可以开始编码了,首先为虚拟键盘的方向键创建Rect(可以用绘图工具测量坐标):RectrKeyUp=newRect(56,290,86,

8、320);RectrKe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。