文档章节

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

雁惊寒
 雁惊寒
发布于 2017/01/20 14:09
字数 1227
阅读 211
收藏 1

需求分析

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

我们来总结一下:

  • 飞机有哪些基本功能?    飞行、射击、爆炸;
  • 飞机有哪些基本属性呢? 生命、攻击、碰撞体、外观;
  • 飞机有哪些种类呢?    
    • 玩家飞机:具有特殊的控制方式、具体左飞、右飞、暴走变形等特殊的外观;
    • 僚机:玩家飞机的附属,生命:无敌,与玩家飞机共存亡;
    • 必杀僚机:无敌,飞行动作固定:从下方飞出来,射击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>这个成员变量,这是一个简化的“子弹池”,当需要发射子弹时,从池中获取子弹,当子弹爆炸或者飞出屏幕时,子弹需要回收,放回池中。

 

转载请注明:https://my.oschina.net/u/1986600/blog/828368

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

© 著作权归作者所有

共有 人打赏支持
雁惊寒
粉丝 20
博文 13
码字总数 20195
作品 1
南京
程序员
私信 提问
thorqq/RaidenFree

功能介绍 本游戏是一款基于Cocos2dx开发的纵版飞行射击单机手游。玩家可以控制一架飞机与敌机进行对战,飞机可以发射子弹、导弹甚至激光,除此之外,玩家还能对自己的飞机进行强化改造,提升...

thorqq
2017/01/20
0
0
cocos2d-x支持c++、js、lua开发

作者:左文 链接:https://www.zhihu.com/question/21130385/answer/21789568 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 纯属个人观点 1 Unity3d支...

壹峰
2017/10/18
0
0
写给对 ”游戏开发” 感兴趣的朋友们

我们程序员能为世界带来什么? 有些程序员做出了 淘宝/Amazon,为世界带来了电子商务。 有些程序员做出了 微信/Twitter,为世界带来了社交平台。 而有些程序员做出的东西,虽然无法应用于我们...

程序员小灰
03/05
0
0
仿雷电飞行射击手游--Raiden

游戏介绍 本游戏是一款基于Cocos2dx开发的纵版飞行射击单机手游。玩家可以控制一架飞机与敌机进行对战,飞机可以发射子弹、导弹甚至激光,除此之外,玩家还能对自己的飞机进行强化改造,提升...

雁惊寒
2017/01/20
4.3K
4
手游开发神器 cocos2d-x editor 教程聚合和代码下载(持续更新中)

一 cocos2d-x editor工具下载和基础教程: 一 手游开发神器 cocos2d-x editor初识 二 手游开发神器 cocos2d-x editor工具下载和安装配置 三 手游开发神器 cocos2d-x editor 之基础工具 inte...

makeapp628
2014/02/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2019 年最好的 7 款虚拟私人网络服务

糟糕的数据安全会带来极大的代价,特别是对企业而言。它会大致大规模的破坏并影响你的品牌声誉。尽管有些企业可以艰难地收拾残局,但仍有一些企业无法从事故中完全恢复。不过现在,你很幸运地...

linuxCool
26分钟前
1
0
OSChina 周一乱弹 —— 加油,还有11个小时就下班了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @_全村的希望 :吴亦凡把大碗面正儿八经做成单曲了,你别说,还挺好听 《大碗宽面》- 吴亦凡 手机党少年们想听歌,请使劲儿戳(这里) @tom_t...

小小编辑
47分钟前
181
9
C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
7
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
6
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部