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