日期:2014-05-20  浏览次数:20821 次

Effective J2ME(1)

    本文节选于笔者在数年前开发手机游戏时总结的一份文档。一家之言,贻笑大方。1 J2ME开发基础
1.1 计算几何在J2ME开发中的应用

????? 由于支持J2ME的设备通常不支持浮点运算,所以对于某些特定的问题可以通过计算几何学的方法解决。例如判断两条线段是否相交的算法,在支持浮点运算的设备上可以通过联立方程组求解的方法解决。在不支持浮点运算的设备上则需要通过计算几何的向量运算来解决。常见的可以通过计算几何学的方法解决的问题有 1、判断两线段是否相交;2、判断线段、折线、多边形是否在矩形中;3、判断矩形是否在矩形中;4、判断圆是否在矩形中;5、判断点是否在多边形中;6、判断折线是否在多边形内;7、求线段或直线与折线、矩形、多边形的交点;8、凸包的求法等等。具体的算法可以查阅计算几何学相关的教科书。1.2 有限状态机在J2ME开发中的应用

????? 有限状态机在硬件设计、编译理论等许多方面有着广泛的应用。它同样适合游戏开发。例如在ForrestWarrior游戏中,Player类就采用有限状态机来控制各种状态之间的迁移。Player有以下几种状态1、站立;2、站立行走;3蹲;4、蹲着行走;5、跳跃;6、下落。同时在1、3、5和6状态下可以进行攻击(由于J2ME不响应同时按键,所以在2和4状态下不能攻击)。如果采用条件分支语句进行状态判断的话,判断逻辑将会异常复杂而且难于修改和调试。而在采用了有限状态机之后,控制逻辑大大简化。具体代码可以参考ForrestWarrior游戏中的Player类和State类。1.3 J2ME游戏中寻径算法的设计策略

????? 一提到寻径算法,大家通常都会想到A*算法。但是由于支持J2ME设备的运算能力有限,堆栈的大小也不适合做复杂的递归运算,所以寻径算法的设计要针对每款游戏的特点进行设计。例如在雷鸟号游戏中,每架飞机(军舰、坦克)的寻径策略已经编码在剧情文件中,这样做的优点在于可以有效的控制飞机的编队移动。在BomberMan游戏中,利用动态的阀值控制NPC的移动。具体策略就是通过设置不同的阀值上下限,同时在每一次移动之后对阀值进行微调的方法来控制移动中变向的频率。在荒岛探宝游戏中则采用了更精确的寻径算法。具体策略是采用广度优先算法搜索与Player连通的区域(通过调整搜索队列的大小来控制搜索的范围)。在搜索的过程中,如果某个点和Player连通,则同时标记与Player的距离。有了这些数据之后,NPC的寻径策略就变得相对简单。在NPC的每次移动之前,首先判断目前所在的位置和Player是否连通,如果不连通就采用同BomberMan游戏中的NPC类似的算法进行移动;如果连通,就走向与 Player的距离更小的那个点。