cocos2d-x-3.3-023-仿微信飞机大战-总体分析和建模
来源:互联网 发布:windows隐藏窗口样式 编辑:程序博客网 时间:2024/06/01 20:11
原文同步发布于我的wiki,查看原文或更新请移步:点击打开链接
总体分析
一开始得想明白了的问题
- 游戏里面的可见元素,采用is-a精灵,还是采用has-a精灵好: 直接继承精灵使用于相对简单的情形;而对于复杂的UI构成采用组合策略, 这时候用继承Node,并采用has-a精灵的关系是不错的选择。
- 子弹发射这个动作的思考(包括产生敌机,英雄出场,补给出场等都适用这个问题),cocos提供的导演和场景是用于流程控制的;层是画布;而精灵则是画布上的元素,故在发射或者创建一个子弹时要指定他所属于的画布。之后子便弹自个儿播放动画玩耍了。
- 层的使用,为了将相对独立的ui展示分离,使得代码耦合降低,将不同功能放到不同的层是个很好做法,如背景层,控制层等。
- 速度是每秒多少个像素点? 这个问题适用于其他元素,比如生命值,攻击力,飞行速度如何取值等。在真真的游戏开发团队里, 这个工作应该是有专们团队进行策划的。我们这里就初步按照跑出来的效果进行调整了。
- 怎么根据剧情或者关卡产生画布上的角色呢?提供一个关卡管理器,他的动力源是调度器。给他设置一个调度器回调,然后在回调里面不停的根据当前关卡的设置产生敌人,类似actionManager。
- 游戏的整个过程就是拍电影: 总导演安排好人架好了摄像机,选好了拍摄场景,决定场景是否切换,这些大事儿总导演负责。细节交个手下的副导演, 副导演找群众演员,找主角,负责安排出场顺序,负责驱动场上的逻辑-碰撞监测。每个关卡的剧本是不一样的。剧本管理员专门负责剧情的配置管理。
- 主角和群众演员根据剧情配置分别化不同的妆,带不同的装备,不同的技能等。
- UI按钮的显示和主角的关系: 我的理解是这两者应该不是is-a, has-a的关系,而是发布订阅的关系。
一点拓展思考
- 也看了一些例子,包括上一篇提到的专栏,碰撞检测是通过‘副导演(或者谁谁谁)持有子弹数组,敌人数组,来两重循环进行碰撞检测’吗? 我的想法是, 碰撞检测相关代码由cocos的框架来实现并提供回调,客户端代码不用保留两个数组并循环, 而是让发射的子弹自己进行碰撞检测,并根据相应回调进行状态切换,这样的游戏代码看上去更具美感点。
- 由上面的‘碰撞检测’的问题引出本问题,采用上面的碰撞检测方案的话, 游戏里面的精灵元素更像'提线木偶', 每一帧里'副导演'都要喊'进行碰撞检测了', ‘碰撞了就攻击了’。。。 这会累死副导演的。 若精灵元素可自行检测碰撞,并根据相关回调进行状态切换,播放不同的动画效果等,就可以将‘副导演’里面的逻辑代码放入不同的精灵元素中,这样的代码耦合性会降低,封装性更好,更容易扩充。
- 物理引擎可以满足上述需求么?
- 答案见下一节。
物品详细分析
飞机: 我方战斗机, 敌人飞机, 都是飞机, 阵营不同而已 飞机可被伤害 飞机可被修复 飞机有枪 飞机用枪发射子弹 飞机有飞行速度 飞机有方向 飞机能得到补给 枪:发射子弹 枪有子弹 不同类型的枪一次发射的子弹数量不同,发射的子弹也不同 子弹:有杀伤力,体现为威力 子弹杀伤敌人后自己的生命周期也结束了 子弹无眼?子弹有眼?即子弹可以伤害同一阵营的人么?先无眼吧,不纠结 子弹有速度 子弹有起始位置 子弹有方向 补给-血包:+血用 补给-双排枪:换枪,子弹打光后再换回默认的枪 补给-炸弹:给飞机挂几颗导弹,发射后全屏灭怪 补给有速度 补给有起始位置 补给有方向
建立类族
类图如下
https://github.com/cheyiliu/All-in-One/raw/master/res/cocos2d/warofairplain.jpg
说明
- 飞机系
Role: 角色类定义,属性有:队伍,血量,攻击力,资源等; 行为有:判断是敌是友,攻击,被攻击,获得各种补给; 提供静态工厂方法RoleHero: 英雄,属性有:多把枪用于远程攻击;可以获得各种补给等;RoleEmemy: 敌人:只能有攻击和被攻击行为。RoleEnemy有3个子类,代表大中小型敌人,负责用不同的资源来实例化
- 补给系
Supply: 补给类,定义了基本方法;和工厂方法。Supply有3个子类,负责不同的补给工作。
- 枪支弹药系
Gun: 枪,功能是开火发射子弹;包含静态工厂方法。Gun有3个子类,装有不同的子弹,代表不同的枪。Bullet: 子弹基类,属性有威力,资源等;行为有杀伤;同时有静态工厂方法(后期开发看需求是否需要单独分离出工厂类)Bullet有3个子类,代表不同类型的子弹。
- 一点说明
为何要提供这么多子类呢, 每个系统有好几个子类, 我的想法是在选用不同资源代表不同类型的物体时不想用太多的if else。不子类化那么父类将承载过多的判断语句。上述的补给系,枪支弹药系都作用于飞机系。
代码草稿
- 最近用java比较多,先用java打了个草稿, 整理了下思路, 上述类对应的代码在https://github.com/cheyiliu/test4java/tree/master/src/test/cocos/airplain
- 接下来就是用c++结合cocos的机制实现了。在实现过程中将尽量遵循上述类的关系。当然必要的调整也是难免的。
3 0
- cocos2d-x-3.3-023-仿微信飞机大战-总体分析和建模
- cocos2d-x-3.3-022-仿微信飞机大战-开篇介绍
- cocos2dx飞机大战Cocos2d-x飞机实现
- cocos2dx飞机大战教程Cocos2d-x飞机大战运行效果
- cocos2d-x-3.3-024-仿微信飞机大战-如何引爆炸弹-实现范围攻击
- Cocos2d-x飞机大战教程笔记
- cocos2d-x 3.2 |飞机大战:技能
- cocos2d-x小游戏——飞机大战
- Cocos2d-x飞机大战源代码下载
- cocos2d-x--->飞机大战第一天0905
- cocos2d-x--->飞机大战的总结0913
- cocos2d-x 3.2 |飞机大战:飞机与子弹
- 【cocos2d-x入门实战】微信飞机大战之四:主角的登场和帧动画
- 【cocos2d-x入门实战】微信飞机大战之七:触摸事件和优先级
- 【cocos2d-x入门实战】微信飞机大战之十一:游戏暂停和触摸屏蔽
- 【cocos2d-x入门实战】微信飞机大战之十四:背景音乐和音效
- 【cocos2d-x入门实战】微信飞机大战之十五:跨平台移植和广告植入
- 【cocos2d-x入门实战】微信飞机大战之十五:跨平台移植和广告植入
- JavaScript快速入门(五)——表达式运算
- maven 学习笔记(八)-创建简单的intellij+android+maven工程
- matlab 默认打开路径的修改
- 更轻量的 View Controllers
- (老文章)Box2D新手入门顺阶教程
- cocos2d-x-3.3-023-仿微信飞机大战-总体分析和建模
- 庄表伟回应破破桥:OpenSSL是否值得同情?
- 还有人在用硬盘吗?
- asp.net 注意事项
- 手机卫士 自定义土司
- 读AN 视频播放器代码后感
- Android特效开发(仿zaker用手向上推动的效果(推动门效果))
- 选择不相交区间-java实现
- ubuntu12.04配置静态IP及设置DNS