飞行游戏程序设计要点【做J2ME游戏时候的一些心得】

来源:互联网 发布:北大宿舍条件知乎 编辑:程序博客网 时间:2024/04/29 18:18

        飞行游戏程序设计要点            

1、 地图 1.1 层次问题
    如果这个游戏完全是在一层上面进行,会让人索然无味。因此,有必要对游戏分层次。地面上有坦克和一些炮塔,云层中有时不时冲出来的敌机,而最上面的这一层就是游戏画面的主体,大量的敌机!
因此,游戏要分为3层!地面 云(云层为可选) 主画面层 1.2  如何拼接
      用一张整图不现实,这样会影响程序的执行效率,而且很占空间。只有通过图块的拼接。因此,要设计合理的图块(Tile),对地图索引的排列也需要重点的设计。还有地图工具的寻找和使用,脚本化地图的编辑,使地图编辑更方便,不仅是程序人员可使用,其他人员如策划和美术通过此工具编辑后导出拼接文件给程序人员。 1.3 装载地图
     将地图索引写进文件,在程序装载的时候,通过输入输出流来读取地图内容。与地图工具的相结合使用,抽取独立的工具类和函数。

 2、 子弹
       在飞行射击游戏中,最重要的,给人印象最深刻的就是那满屏幕的,铺天盖地的子弹,因此,对子弹类的设计是游戏成功的关键。 2.1  玩家发射的子弹
      默认的子弹为最低杀伤力,最基本的子弹形态
      通过获得敌人掉落的子弹夹,可以改变子弹形态 2.2  普通敌人的子弹
       大致分为:
       迅速下落的子弹
       以敌机自身为中心的向四周扩散的环状子弹群
       设置可以发跟踪玩家的子弹 2.3  Boss的子弹
      具体属性,分为3个生命阶段,
在Boss的每一个生命阶段发射不同的子弹
      Boss的子弹的特性:密集,发射频率快 2.4  对通用子弹模块的抽取
      子弹有其共同特征,单独抽取出来,便于以后重复利用

3、 碰撞检测 3.1 如何检测碰撞
在飞行射击游戏中,碰撞是最关键的技术,如果不能很好的解决,会影响玩游戏者的兴趣。因为飞行射击游戏说白了就是碰撞的游戏——躲避敌人的子弹或飞机,同时用自己的子弹去碰撞敌人。
     采用矩形检测,首先设置检测矩形区域,通过循环判断飞机、子弹之间的距离值来判断。 3.2 对碰撞做出的反应
 一旦确定两个物体发生了碰撞,就要对这种情况做出反应。最简单的反应就是将其中的一个对象(或者两个)从游戏中删除。这在这种类型的游戏中是很常见的。
A:敌机子弹与玩家控制的战舰发生碰撞
   玩家战舰减血,直到没有生命。战舰发生剧烈的爆炸(播放动画,一组连续的图片),子弹消失
B:玩家子弹与敌人普通战舰发生碰撞
    敌机爆炸。播放动画,子弹消失
C:玩家子弹与BOSS碰撞
    Boss减血,直到生命终结。然后发生爆炸 3.3 玩家效果显示的控制
 爆炸效果:爆炸图片与玩家飞机图片分开存放
 若隐若现效果:通过控制玩家的显示状态和时间综合控制
  4、 敌人 4.1 普通敌人智能
     至少有3种类型的敌人:
     比如:空中悬浮的炮塔
           大型战舰
           地上的坦克,炮口缓慢的指向玩家           4.2 Boss智能
      应该设计不同的关卡不同的BOSS,
     能够随机的改变位置
     有一定的概率向玩家急速冲过来
     有一定的概率尾随玩家
     主要是跟随与躲避算法 4.3 自身属性
     A:普通敌人的各项属性
               能够经受多久的打击。
               子弹发射的频率
               会追击玩家吗?
     B:BOSS的各项属性
 是否具有大招的功能
               设计多种不同的大招
               每一个关卡的BOSS的技能

 5、 游戏按键
考虑到有些玩家的手机键盘上的方向键不是特别规则或者说不好操作,应该设计数字键与方向键相对应。
 在这种激烈的飞行游戏当中,按键的响应速度要重点考虑,比如:当按右键,飞机向右移动,松开右键的时候,飞机应该马上停止右移。
这样,左右按键分别控制飞机的左右移动,默认情况下飞机会随屏幕缓慢的向上移动,设置上键可以实现飞机的加速功能,这在躲避敌人尾随追击的时候会起到很大的作用。

6、游戏存档
 对于每一次启动都要从头开始的游戏,玩家是不会感兴趣的,因此我们必须提供游戏存档功能,以保存当前游戏所在的关卡和其他的一些状态信息,所有的这些信息都通过记录管理系统(RMS)存储到存储器中,当玩家返回游戏的时候,他可以选择恢复以前的状态。 7、效率 7.1 忽略微小的细节问题
在游戏中大量的时间,资源耗费在碰撞检测中,为了游戏的性能、效率在不影响游戏的可玩性的情况下需要忽略一些细节问题。如在碰撞的时候,不必纠缠于几个像素之间的距离

 7.2 不要频繁的创建对象
          用对象池来减少对象创建的总数量和频率,这样可以大大提高游戏的性能。要认真考虑每一个对象创建的意义。 7.3 绘制屏幕的问题
         游戏的大部分耗在了绘制图像上,减少屏幕的重绘次数对性能提高有好处。我们可以循环检测屏幕图像是否在某个部分发生了改变,如果没有就不用对那部分的屏幕进行更新。另外一个方法就是增加绘制图像的尺寸来减少单独得绘制调用次数 7.4 提前绘制复杂图像
可以使用屏幕缓冲 7.5 节省运算
  对数值进行预计算,就可以避免再调用大开销的计算方法。

8、兼容性 8.1 采用低版本midp和cldc
为了适应各种机型(包括低性能机型),建议采用midp1.0和cldc1.0实现。 8.2 不同屏幕大小问题
为了适应各种机型屏幕,建议采用相对坐标或ant配置。

 9、飞机模块 9.1 飞机模块的抽取
对于飞机无论是玩家还是非玩家的飞机可抽去其共性。在以后的实现中,玩家和敌人的飞机都可以由一个基类来派生。

 10、关卡
关卡地图的设置:
     不同的关卡需要不同样子的地图。应该在外面定义LEVEL文件来定义各个关卡的具体属性。这是目前一种很流行的方法。 11、游戏特效
     飞行射击类游戏最主要的就是其爆炸的特效,首先就需要给玩家以视觉上面的震撼。
A:玩家发大招,特效的设计问题
B:敌人BOSS的大招

原创粉丝点击