基于J2ME WTK的2D手机游戏开发(英文文献翻译) 第5页

基于J2ME WTK的2D手机游戏开发
J2ME提供了描述的概念,使得可以为特定的设备家族定义相同的Java平台。描述可以满足两种明显不同的可移植性需求:
(1)描述为在一个特定的设备家族实现应用提供了完整的工具,比如传呼机、机顶盒、移动电话、洗衣机或智能玩具。
(2)可以创建一种描述来支持重要的、一致的一组应用,这些应用可能会在几各不同的设备上运行。
简单地说,描述就是应用和市场的设备家族之间的协议。处于同一个设备家族中的所有设备都必须实现其描述所定义的特征,并且要求应用只使用这个特定描述所提供的功能。在实现层次上,描述被简单地定义为应用在特定配置上的Java API和类库的集合,同时为市场中特定的设备家族提供了附加的面向特定领域的功能。
现在,己经有了五个规范化了的描述。如表3-1所示。
  表3-1 五个规范化描述
描述名称 下层配置
Mobile information device profile(MIDP) CLDC
Personal digital assistant profile CLDC
Foundation profile CDC
Personal profile CDC
RMI profile CDC
3.4.1 MIDP 应用程序
CLDC和MIDP组合起来为创建移动电话应用程序提供了完整的环境。MIDP应用程序或者称为MIDlet。其模型如图3-2所示。
 图3-2 MIDlet应用框
MIDlet 有三个状态,分别是pause、active 和destroyed。在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet 实例并使得他处于pause 状态,当startApp()方法被调用的时候MIDlet 进入active 状态,也就是所说的运行状态。在active 状态调用destroyApp(booleanunconditional)或者pauseApp()方法可以使得MIDlet 进入destroyed 或者pause 状态。值得一提的是destroyApp(boolean unconditional)方法,事实上,当destroyApp()方法被调用的时候,AMS 通知MIDlet 进入destroyed 状态。在destroyed 状态的MIDlet 必须释放了所有的资源,并且保存了数据。如果unconditional 为false的时候, MIDlet 可以在接到通知后抛出MIDletStateChangeException 而保持在当前状态,如果设置为true 的话,则必须立即进入destroyed状态[14]。如图3-3说明了MIDlet 状态改变情况。
图3-3 MIDlet 状态图
3.4.2 MIDP UI 组件
In 组件与低级绘制相比,用在游戏开发上的机会较少,但还是会到。所谓UI组件,是指继承了javax.microedition.lcdui.Screen类的javax.micr oedition.ledui.Alert,javax.microedition.lcdui.Form,javax.microedition.lcdui.TextBox,javam microedition.lcdui.List等。如图3-4为我们展示了整个LCDUI 包的体系。
 图3-4 LCDUI包的体系
Screen 类属于高级图形用户界面组件, Canvas 是低级图形用户界面组件,在同一时刻,只能有唯一一个Screen 或者Canvas 类的子类显示在屏幕上,我们可以调用Display 的set Current()的方法来将前一个画面替换掉,我们必须自行将前一个画面的状态保留起来,并自己控制整个程序画面的切换。同时我们可以运用javax.microedition.lcdui.Command 类来给我们的提供菜单项目的功能,分别是:Command.BACKCommand、Command. CANCEL、Command.EXIT、Command.HELP、Command.ITEM、Comm and.OK、Command.SCREEN 和Command.STOP,我们在Display able对象中定义了add Command()和remove Command()两个方法,这就意味着我们可以在高级UI 和低级UI 中同时使用Command 类,同时我们通过注册Command 事件来达到事件处理的目的,即Command 必须与Command Listener 接口配合使用才能反映用户的动作[23]。
与高级UI 相比,低级UI 就自由很多,任何时候我们可以调用repaint()产生重绘事件,调用完了repaint()会立刻返回,调用paint()回调函数则是由另一个专门的线程来完成。底层事件大致可分为三类:Press Events(按键事件),Action Keys(动作按键,PointerEvents(触控事件)。
我们将围绕这三个主题来介绍一下这种事件的用法:
键事件的几个核心方法为:keyPressed(),keyReleased(),keyRepeated(),当按键按下时会触keyPressed(),当松开按键时,会触发keyReleased(),当长时间按住按键时会触keyRepeated(),但是RepeatEvents 不是JTWI 要求强制支持的,所以使用之前要进行测试,看设备是否支持。在Canvas 里面我们每按下一个按键都会触发keyPressed()函数,并传入相应位置的整数值,我们在MIDP 规范中可以很容易的发现,KEY_NUM0—KEY—NUM9 十个常数分别代表键盘上的0-9还有两个功能键,KEY_STAR,KEY_POUND,如果我们传入的值小于0,代表我们传入了不合法的keycode,某些机器上还支持连续按键响应,但这并不是JTWI 规定要支持的,所以我们在进行实际开发之前一定要用我们前面讲到的hasRepeatEvents()方法来进行判定。动作按键主要针对游戏来设计的,在API 中定义了一系列的动作事件:UP,DOWN,LEFT,RIGHT,GAME_A,GAME_B,GAME_C,GAME_D,当按下这些按键时会映射到我们自己为每个按键事件编写的方法,来完成一些动作

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有