随笔-12  评论-14  文章-0 

仿《雷霆战机》飞行射击手游开发--游戏对象

转载请注明:http://www.cnblogs.com/thorqq/p/5645170.html 

项目首页:https://www.oschina.net/p/raiden

需求分析

    既然我们做的是打飞机游戏,那需要有哪些游戏对象呢?观察一下下面这个游戏中的图片。首先,主角当然是飞机,有玩家飞机、两侧的僚机、敌机。飞机上装有各式各样的武器:普通子弹、导弹、激光等。如果只是一成不变的飞机打飞机,子弹没有变化,飞机也没有变化,那也太没意思了。所以我们还增加了道具,当敌机被击落时,会有一定的几率爆出宝石和其他各种奖励道具,比如武器升级、战机暴走、修复护甲、超级必杀、量子护盾。

我们来总结一下:

  • 飞机有哪些基本功能?    飞行、射击、爆炸;
  • 飞机有哪些基本属性呢? 生命、攻击、碰撞体、外观;
  • 飞机有哪些种类呢?    
    • 玩家飞机:具有特殊的控制方式、具体左飞、右飞、暴走变形等特殊的外观;
    • 僚机:玩家飞机的附属,生命:无敌,与玩家飞机共存亡;
    • 必杀僚机:无敌,飞行动作固定:从下方飞出来,射击n秒,往下飞走;
    • 敌机:从屏幕的某处自动飞出,不射击或者自动射击;
    • 高级敌机:从屏幕的某处自动飞出,飞到固定位置后,变形,然后射击;
    • boss:初始动作与高级敌机一样,不过boss支持多次变形,当血量少于某几个固定的值后,会触发boss的变形,每变形一次,攻击力增强。当boss击落后,会产生巨大的爆炸。
  • 武器有哪些基本功能?    射击、爆炸;
  • 武器有哪些基本属性呢? 攻击、碰撞体、外观;
  • 武器有哪些种类呢?    
    • 散弹:各类平行、开花子弹;
    • 自定义子弹:以后详述;
    • 跟踪导弹:始终会跟踪最近的敌机飞行,直至击落敌机;
    • 激光:矩形形状,伤害值按接触的时间计算;
  • 道具有哪些基本功能?    飞行;
  • 道具有哪些基本属性?    道具类型、不同的道具对飞机产生不同的作用;
  • 道具有哪些种类呢?
    • 宝石:相当于钱,可以用来解锁、购买其他装备
    • 武器升级:使玩家飞机的武器提高一个等级;
    • 战机暴走:使玩家飞机的武器提高到最高等级;
    • 修复护甲:恢复玩家飞机一定的生命值;
    • 超级必杀:从屏幕底部飞出一个巨大的僚机,发出超级激光,秒杀屏幕中的所有敌机(如下图);
    • 量子护盾:给玩家飞机增加一个护盾,该护盾能抵挡一次子弹的攻击,同时,护盾被击中时能释放出特殊的能量,能将屏幕中所有的子弹都转化为宝石;

“超级必杀”的清屏效果是不是感觉很爽!!

右下角金黄色飞机的外围是不是有一圈半透明的蓝色圆环?这就是量子护盾。

类设计

好了,需求分析的差不多了,我们现在来抽象一下这些游戏对象,如下图:

  •     首先,我们对所有的游戏对象进行分析,总结出GameObject这个派生自Sprite的类,其中包含了几个常用的方法:pause()/resume()/getBody()/setBody(),
    • pause()/resume():使游戏对象暂停、继续运动。这两个函数与Node中的pause()/resume()不同,这两个函数在使游戏对象本身暂停/恢复的同时,会使所有的子节点都调用一遍pause()和resume();
    • getBody()/setBody():为简单起见,我们没有使用物理引擎,而是我们定义碰撞体。每一个游戏对象都有一个碰撞体,当不同游戏对象的碰撞体发生碰撞时,会产生不同的效果,例如爆炸、产生奖励等等。这里的body是一个简单矩形,我们自己定义矩形的大小和相对于Sprite的位置。
  •      接着,飞机(Aircraft)、武器(BulletGroup/Bullet)、道具(Reward)都继承自GameObject。

 

    这里需要重点关注一下BulletGroup和Bullet。我们可以把BulletGroup理解成包含弹匣的一把枪,把Bullet理解成单颗子弹。枪(BulletGroup)内包含了n发子弹(Bullet)。枪(BulletGroup)的不同,决定了子弹(Bullet)的外观、子弹的初始位置和飞行轨迹不同、子弹发射的频率和同时射出的数量不同。 所以,我们在BulletGroup中放了vector<Bullet>这个成员变量,这是一个简化的“子弹池”,当需要发射子弹时,从池中获取子弹,当子弹爆炸或者飞出屏幕时,子弹需要回收,放回池中。

 

转载请注明:http://www.cnblogs.com/thorqq/p/5645170.html 

下一篇,我们将结合代码讲述各种游戏对象。

posted on 2016-07-05 22:31 雁惊寒 阅读(...) 评论(...) 编辑 收藏