万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。
因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。
2. 游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在 MIDP2.0 中提供了用于增强游戏功能的 game 包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决
方案。
3. 玩家飞机的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的智能性;敌人飞机的运行算法也要进行相关的设置,已免游戏过于简单。
4.对于双方发射的子弹应该赋予不同的速度,同时,程序应该设定敌人飞机的子弹不与敌人的飞机进行碰撞检测,已增加游戏的可玩性。
5. 双方的飞机在前进时也需要考虑到是否碰撞到对方飞机,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。
每一次刷新页面、每前进一步都需要进行相关的碰撞检测。
6.为了增加界面的美观,在程序中添加了白云。
由于手机屏幕大小有限,所以白云的数量和出现的位置要经过相关的设置,才能实现白云不规则出现的效果。
7. 游戏的地图不可能通过绘图来解决。
否则,不仅难于控制和处理过多的元素,也会因过多的大型图片而不能限制程序的大小,失去手机上
程序的原则和 Java 的优势。
8. Java 是基于虚拟机的半解释型编译系统,其执行效率较 C等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。
除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器Obfuscator进行程序打包后的优化。
9. 游戏的结束、开始、动态信息画面作为构成一个程序都是必不可少的重要部分。
良好的用户界面更是吸引用户的硬指标,相关的美术构图和人性化设置也需要有一定的考虑。
以上相关技术细节和整体流程将分别在以下小节阐述。
3.2 程序流程 MIDlet suite 是 MIDP 应用程序的最小单位,JAM 负责将手机内的 MIDlet suite 以图形化的方式呈现,让用户能够选取欲执行的 MIDlet suite,一旦选取了某个 MIDlet suite,操作系统就会激活 KVM 执行里面的 MIDlet。
MIDlet 及相关的支持类组成了 MIDP 应用程序的实际内容。
而 呼叫 MIDlet 的构 每 个 MIDlet 都 必 须 继 承 造函数javax.microedition.midlet.MIDlet StartApp 停止状态 Paused DestroyApp这个抽象类。
在 MIDP 规范中定义了MIDlet 的生命周期,以及可以存在的 运行状态 消减状态三种状态,包括 Paused、Active 以及 Active PauseApp DestroyedDestroyed,每一个 MIDlet 在任何时 DestroyApp刻只可能处于其中的一个状态。
这三 图 3-1 MIDlet 的流程种状态的转换关系如图 3-1 所示:MIDlet 有三个状态,分别是 pause、active 和 destroyed。
在启动一个 MIDlet 的时候,应用管理软件会首先创建一个 MIDlet 实例并使得他处于 pause 状态,当 startApp方法被调用的时候 MIDlet 进入 active 状态,也就是所说的运行状态。
在 active 状态调用 destroyAppboolean unconditional 或 者 pauseApp 方 法 可 以 使 得 MIDlet 进 入destroyed 或者 pause 状态。
值得一提的是 destroyAppboolean unconditional方法,事实上,当 destroyApp方法被调用的时候,AMS 通知 MIDlet 进入 destroyed 状态。
在destroyed 状态的 MIDlet 必须释放了所有的资源,并且保存了数据。
如果 unconditional为 false 的时候,MIDlet 可以在接到通知后抛出 MIDletStateChangeException 而保持在当前状态,如果设置为 true 的话,则必须立即进入 destroyed 状态。
本程序采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。
运行程序后允许用户选择执行选项菜单,在开始游戏后将先从外部文件载入地图文件,对背景的所有物体进行绘图。
在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。
游戏开始后先绘制地图,并将各个对象实例化。
在主程序运行的线程中,游戏中所有的对象都应该运行在同一个线程下。
当敌人或者用户的子弹达到射程范围后,并不删除子弹对象,而是使用 setVisablefalse使其不能显示,当用户或敌人在次发射子弹时,只需使用 setVisabletrue设置成可以显示即可。
在屏幕重绘的主程序中,将在每次的循环中判断若干事件,以便程序进入相关的分支执行相关的反应代码。
如:玩家剩余飞机数是为 0、敌人、玩家飞机是否被击中、屏幕上相关信息的绘制等。
程 序 为 需 要 完 成 独 立 功 能 的 模 块 设 置 了 单 独 的 类 。
lzhhdm 类 继 承 自 Midlet ,gameScrenn 类、MenuScreen 类继承自 GameCanvas,mybullets 继承自 Sprite 类。
载入程序后首先启动的是程序介绍的信息画面。
点击 ok 后调用 MenuScreen 类实现菜单。
如果选择进入游