学习情境3手机游戏的控制.ppt
《学习情境3手机游戏的控制.ppt》由会员分享,可在线阅读,更多相关《学习情境3手机游戏的控制.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习情境学习情境3 3 手机手机游戏的控制游戏的控制 能力目标v能熟练实现线程、启动和停止线程以及合理控制线程的执行;v使用脱屏画布实现绘制双缓冲区技术;v能熟练地制作进度条;v学会使用getInstance()的方法获得对象实例;v能熟练地在Displayable界面中加入所需按钮,移除不需要的按钮;v能在代码中使用if语句或switch语句区分不同的按钮,以实现不同的功能;v完成从菜单进入相应游戏界面,再从游戏界面返回菜单的操作;v正确实现游戏的开始、暂停、继续、重玩和返回功能;v能快速搭建起手机游戏的制作框架。认知目标 v了解多线程的概念以及线程的四种状态;v理解可变图像和不可变图像的区
2、别;v识记创建脱屏画布、获取脱屏画笔的方法;v了解对象池的概念,理解制作进度条的核心思想;v了解MIDP框架中对事件的处理机制,熟记实现事件处理的三个步骤;v识记CommandListener事件监听器的注册方法和在该监听器接口中定义的commandAction()方法;v了解ItemStateListener和ItemCommandListener事件监听器的注册方法和实现方法;v理解游戏状态变量在游戏控制中发挥的作用。3.1 学习情境描述 在游戏开始前,通常需要完成对资源的加载操作,载入资源会出现一定的等待时间。在游戏中,通常使用进度条的方式来提示用户:“正在进行资源载入,请耐心等待!”。
3、在从菜单进入游戏界面,以及在游戏过程中界面之间的切换、游戏进程的“开始”、“暂停”、“继续”、“返回”、“退出”等,则通常使用按钮的方式实现对用户操作的响应。在一款手机游戏中,存在很多关于游戏的控制环节。本学习情境分为四个学习单元来完成。单元一,响应菜单命令;单元二,使用线程控制游戏进程;单元三,制作游戏加载进度条;单元四,搭建手机游戏制作框架。3.2 响应菜单命令 在游戏屏幕的左下角或右下角通常会有一些类似“确定”、“取消”、“退出”、“返回”等操作的提示,称之为“功能按钮”。用户通过按下键盘上的“左上”或“右上”功能键来响应这些“功能按钮”。使可视界面组件“活”起来,使之具备与用户交互的能
4、力,成为用户与手机游戏沟通的桥梁。“功能按钮”可以是Command组件构造的,也可以是一个绘制的图片,当然也可以是直接“写”上去的提示文字。本学习单元的主要任务:在游戏界面上添加各种形式的按钮,并通过这些“功能按钮”,从菜单项进入到游戏界面,再从游戏界面返回到主菜单。事件:一个事件描述了一个对象状态的改变。例如:点击按钮。事件源:产生事件的对象。当这个对象的内部状态改变时,事件就会产生。事件监听器:当一个事件发生时,对事件做出响应的对象。在对应的事件监听器模型中,事件源和事件监听器是通过注册联系在一起的。一个事件源必须注册一个事件监听器,这样当事件发生时,系统会自动传递事件,调用事件监听器中定
5、义的方法来处理事件。在java.microedition.lcdui包中共定义了三种事件监听器,以接口的形式存在,分别为:CommandListener、ItemStateListener和ItemCommandListener。CommandListener事件监听器 事件源:Displayable对象(而不是Command按钮)。注册方法:setCommandListener(CommandListener l)接口方法:public void commandAction(Command c,Displayable d)ItemStateListener事件监听器 事件源:Form类 及其
6、扩展类。注册方法:setItemStateListener(ItemStateListener l)接口方法:public void itemStateChanged(Item item)ItemCommandListener事件监听器 事件源:Item类的子类。注册方法:setItemCommandListener(ItemCommandListener l)接口方法:public void CommandAction(Command command,Item item)3.2.2 知识准备:事件处理 总之,在MIDP框架中实现事件处理需要做如下三件事情:在类定义中加入implements子
7、句,表示在该类中要实现接口。注册事件监听器。实现接口中的方法,完成对事件的处理。3.2.3 任务一:使用Command按钮响应菜单命令 知识提炼:Command界面组件 Command组件的构造方法如下:public Command(String label,int commandType,int priority)参数说明:label:标签字符串,表示显示在按钮或菜单上的文字。commandType:按钮类型。分别为SCREEN、BACK、CANCEL、OK、HELP、STOP、EXIT和ITEM。请注意这些类型常量仅仅提供一个标识,并不会真正实现相应功能,具体功能需要通过代码来实现。pri
8、ority:优先权。值越小代表优先权越高,1代表最高优先权。如果存在多个按钮需要布局在窗体上,其布局位置根据优先权决定。但实际的布局位置由设备决定。多于两个以上的按钮将构成菜单。如果两个按钮类型相同,则优先权的取值应不同。在Displayable界面中加入Command组件的方法如下:public void addCommand(Command command)参数command为事先定义好的Command组件实例。要点提示 如果一个Displayable对象注册了CommandListener事件监听器,那么,点击该Displayable界面上的所有Command按钮都会触发同一个comma
9、ndAction()方法的执行,因此在该方法中通常要用if语句或switch语句来区分不同的按钮,以实现不同的功能。区分方法有多种,比如:if(command.getCommandType()=Command.EXIT)该方法是通过在定义按钮时设定的按钮类型来区分各按钮。请注意,如果同类型按钮有多个,该法就不适用了。if(command.getLabel().equals(Exit)该方法是通过按钮表面的提示文字来区分各按钮。if(command=cmdExit)该方法是通过使用事先定义好的按钮名称来区分各按钮。3.2.4 延伸任务:返回主菜单要点提示 MIDlet类实例是在手机游戏运行前,由
10、系统构造的,在游戏运行期间是唯一的。也就是说,MIDlet类实例不能由用户构造。因此,在本任务中,通过声明一个静态的MIDlet类实例instance,并在构造方法中进行实例化。这样,就可以在其他类中直接通过MIDlet类的类名进行调用。在手机这样的资源受限设备中,要严格控制使用new方法实例化对象的次数。而且使用new方法生成的两个对象实际上是两个独立的个体,在操作上不会实现同步。因此,在本任务中,通过构造方法参数来传递返回对象,将需要返回的界面(myMenu)作为参数,传递到About类对象中。这样,在进入About界面前,和从About界面返回后,显示的是同一个菜单界面实例。这一点,可以
11、从返回前后,当前菜单项都是“关于游戏”得到验证 3.2.5 任务二:使用图片或文字按钮响应菜单命令要点提示 Command组件构造的“功能按钮”可以加在所有Displayable类的子类上,包括高级界面组件和低级界面组件。响应这类按钮需要由Displayable对象注册一个CommandListener事件监听器,然后通过实现在该接口中定义的commandAction()方法进行按钮的响应。而由图片和文字构造的“功能按钮”只能加在低级界面(Canvas和GameCanvas)上。在实际的游戏开发中,设计并使用与游戏整体风格相适应的图片或文字按钮,会使游戏界面更加美观、更具个性。当用户按下键盘上
12、的“左上”或“右上”功能键去响应这类按钮时,系统会自动响应,并调用相应的按键处理方法(比如:keyPressed()方法)进行处理。3.3 使用线程控制游戏进程 游戏有一定的帧频,需要通过线程来控制。在本学习单元中,首先,通过多闪屏的实现,来学习使用线程;然后,再对游戏时间进行倒计时的控制,进一步熟悉线程;最后,对线程进行深入使用,实现对游戏的开始、暂停、继续和重玩的控制。3.3.2 知识准备:了解多线程 多线程允许在程序中并发执行多个处理流程,每个处理流程都成为一个线程,彼此间相互独立。多线程的好处在于可以提高CPU的利用率。但也必须认识到使用多线程可能带来的不利因素,比如:线程也是程序,需
13、要占用内存。多线程需要协调和管理,线程太多会导致控制太复杂。线程之间对共享资源的访问会产生冲突。3.3.3 任务三:实现多闪屏要点提示1:线程的实现 在Java中实现线程有两种途径:继承java.lang.Thread类,然后改写run()方法 实现java.lang.Runnable接口,实现接口中的run()方法 由于Java语言不支持多继承,所以继承java.lang.Thread类的方法有一个最大的缺点就是不能再继承其他的类。而实现java.lang.Runnable接口的方法只需在已有类的基础之上多实现一个run()方法,没有其他多余的负担。因此建议多使用该方法实现线程。要点提示2:
14、线程的启动和停止 启动线程:Thread t=new Thread(this);t.start();停止线程:正常情况下,run()方法返回时,线程自动停止。调用stop()或destroy()方法也可使线程停止,但会产生异常,且不会释放同步资源,所以不推荐使用。要点提示3:线程的控制 在run()方法中,线程通常使用一个while循环来控制。在循环的开始,获取一次循环的开始时间(st)。循环的最后,获取本次循环的结束时间(et)。如果结束时间和开始时间的差值(diff=et-st),小于每一帧的指定时间(rate),就让线程休眠一个(rate-diff)的差值时间。这样可以强制使每一帧运行时
15、间固定,避免游戏产生忽快忽慢的晃动感觉。3.3.4 任务四:实现游戏时间的倒计时 知识提炼:脱屏画布 脱屏画布其实就是通常所说的绘制双缓冲区技术,是计算机动画的一项传统技术。在动画制作中,造成屏幕闪烁的主要原因在于,画面在显示动画的同时,程序又在改变它。如何解决这个矛盾呢?通常的做法是在内存开辟一片区域作为后台画面,程序对它进行更新、修改,完成后再在屏幕上显示它。创建、使用脱屏画布的关键步骤如下:(1)创建脱屏画布Image buffer;buffer=Image.createImage(SCREENWIDTH,SCREENHEIGHT);(2)获取脱屏画笔Graphics offG=buff
16、er.getGraphics();(3)改变脱屏画布内容offG.drawXXX();(4)将脱屏画布内容显示到屏幕上g.drawImage(buffer,0,0,g.LEFT|G.TOP);3.3.4 任务五:控制游戏的开始、暂停、继续、重玩和返回游戏进行中 游戏暂停 游戏结束 要点提示 游戏的运行与停止、暂停与继续,分别通过一个开关变量来控制。在程序中,使用了boolean型变量isRun表示游戏是否进行中,变量isPause表示游戏是否暂停。在run()方法中,使用isRun变量作为while循环的条件,当游戏没有暂停的时候(!isPause),实现正常的游戏功能。当按下“暂停”按钮时,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习情境3 手机游戏的控制 学习 情境 手机 游戏 控制
限制150内