zoukankan      html  css  js  c++  java
  • 仿《雷霆战机》飞行射击手游开发--游戏对象

    转载请注明: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 

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

  • 相关阅读:
    2.12 使用@DataProvider
    2.11 webdriver中使用 FileUtils ()
    Xcode8 添加PCH文件
    The app icon set "AppIcon" has an unassigned child告警
    Launch Image
    iOS App图标和启动画面尺寸
    iPhone屏幕尺寸、分辨率及适配
    Xcode下载失败 使用已购项目页面再试一次
    could not find developer disk image
    NSDate与 NSString 、long long类型的相互转化
  • 原文地址:https://www.cnblogs.com/thorqq/p/5645170.html
Copyright © 2011-2022 走看看