【cocos2dx-3.0beta-制作flappybird】英雄都是孤独的?--小鸟单例类的设计以及小鸟类的设计
2014-03-19 09:03
381 查看
这一节,我们来分析一下对该游戏的主角——小鸟的处理。
首先,我们应该明白,在整个游戏的过程当中,小鸟有三种不同的状态:
1、准备 IDLE(挥动翅膀,不受重力约束)
2、飞行 FLY(飞行的过程当中,受重力的影响)
3、死亡 DIE(倒地的状态)
我们不仿采用一个枚举类型来保存着三种状态:
1、每场游戏随机选择一直颜色的小鸟 createBirdByRandom
2、小鸟状态的切换 changeState
3、创建小鸟的动画 createAnimation
4、小鸟处在三种不同状态下的动作处理
仔细观察会发现,在这种状态下,小鸟是有两个动作的:其一是翅膀的上下挥动,其二是小鸟本身的上下移动。
于是我们对其采用如下操作:
在进入idle状态的时候,采用给小鸟添加这两个动作:
2、fly状态
当游戏开始之后,小鸟将从idle状态,切换到fly状态
在fly状态的时候,小鸟除了挥动翅膀外,还要受到重力的影响,往下坠落,于是不难理解,其操作如下:
3、die状态
当小鸟触碰到水管以后,它将进入die状态:
四、小结
这一节简单的分析了小鸟在整个游戏过程当中的几个状态,以及状态之间的切换。针对不同的状态,做出不同的响应。
详细代码还请移步到github:https://github.com/OiteBoys/Earlybird
一、分析:
如标题所示,英雄总是孤独的,所以在这里,我们依然把小鸟设为一个单例类,而其具体的实现代码相应的在 BirdSprite.cpp 中首先,我们应该明白,在整个游戏的过程当中,小鸟有三种不同的状态:
1、准备 IDLE(挥动翅膀,不受重力约束)
2、飞行 FLY(飞行的过程当中,受重力的影响)
3、死亡 DIE(倒地的状态)
我们不仿采用一个枚举类型来保存着三种状态:
//BirdSprite.h typedef enum{ ACTION_STATE_IDLE, ACTION_STATE_FLY, ACTION_STATE_DIE } ActionState;
二、小鸟相关操作
在整个游戏过程当中,小鸟应该涉及到如下一些个操作:1、每场游戏随机选择一直颜色的小鸟 createBirdByRandom
2、小鸟状态的切换 changeState
3、创建小鸟的动画 createAnimation
4、小鸟处在三种不同状态下的动作处理
三、3种不同状态的分析
1、idle状态仔细观察会发现,在这种状态下,小鸟是有两个动作的:其一是翅膀的上下挥动,其二是小鸟本身的上下移动。
于是我们对其采用如下操作:
// init idle status //create the bird animation Animation* animation = this->createAnimation(this->birdNameFormat.c_str(), 3, 10); Animate* animate = Animate::create(animation); this->idleAction = RepeatForever::create(animate); // create the swing action ActionInterval *up = CCMoveBy::create(0.4f,Point(0, 8)); ActionInterval *upBack= up->reverse(); this->swingAction = RepeatForever::create(Sequence::create(up, upBack, NULL));
在进入idle状态的时候,采用给小鸟添加这两个动作:
void BirdSprite::idle() { if (changeState(ACTION_STATE_IDLE)) { this->runAction(idleAction); this->runAction(swingAction); } }
2、fly状态
当游戏开始之后,小鸟将从idle状态,切换到fly状态
在fly状态的时候,小鸟除了挥动翅膀外,还要受到重力的影响,往下坠落,于是不难理解,其操作如下:
void BirdSprite::fly() { if(changeState(ACTION_STATE_FLY)) { this->stopAction(swingAction); this->getPhysicsBody()->setGravityEnable(true); } }
3、die状态
当小鸟触碰到水管以后,它将进入die状态:
void BirdSprite::die() { if(changeState(ACTION_STATE_DIE)) { this->stopAllActions(); } }
四、小结
这一节简单的分析了小鸟在整个游戏过程当中的几个状态,以及状态之间的切换。针对不同的状态,做出不同的响应。
详细代码还请移步到github:https://github.com/OiteBoys/Earlybird
相关文章推荐
- 【cocos2dx-3.0beta-制作flappybird】——游戏控制层的设计以及控制层和游戏层的关系
- 【cocos2dx-3.0beta-制作flappybird】终于要来正戏了—游戏层的设计和小鸟的加入
- 【cocos2dx-3.0beta-制作flappybird】就要结束了吗—Android交叉编译以及后继
- 【cocos2dx-3.0beta-制作flappybird】千层饼的智慧—谈谈游戏主场景的分层以及最简单的背景层的实现
- 【cocos2dx-3.0beta-制作flappybird】布告栏中的玄机—游戏状态层的设计与实现
- 【cocos2dx-3.0beta-制作flappybird】玄关是必要的—游戏欢迎界面的创建
- 【cocos2dx-3.0beta-制作flappybird】跟随时代的潮流,关于引擎升级
- 【cocos2dx-3.0beta-制作flappybird】尾随时代潮流,关于引擎升级
- 【cocos2dx-3.0beta-制作flappybird】就这么开始--开发环境的搭建素材的准备
- 【cocos2dx-3.0beta-制作flappybird】我才不会告诉你我硬盘的秘密呢—游戏存储的实现
- 【cocos2dx-3.0beta-制作flappybird】一闪一闪亮晶晶—游戏金币闪烁效果实现
- 【cocos2dx-3.0beta-制作flappybird】未雨绸缪—Loading界面的写法
- 关于【cocos2dx-3.0beta-制作flappybird】教程在3.2工程中出现找不到CCMenuItem.h的解决方法
- 【cocos2dx-3.0beta-制作flappybird】物理世界的美妙—游戏层的物理属性的设置
- cocos2dx3.3开发FlappyBird总结六:设计共享小鸟类(主角)
- 【cocos2dx-3.0beta-制作flappybird】让马里奥大叔来搬水管—在游戏层加入水管
- 【cocos2dx-3.0beta-制作flappybird】对不起,我的数学老师是体育老师兼职的—游戏中所用到的数字类封装
- 【cocos2dx-3.0beta-制作flappybird】——背景介绍
- 关于【cocos2dx-3.0beta-制作flappybird】教程在3.2project中出现找不到CCMenuItem.h的解决方法
- cocos2dx3.3开发FlappyBird总结十:背景层设计