| 版权声明:本文为博主原创文章,未经博主允许不得转载。
开发FlyBird其实非常的简单,在游戏的核心部分,我们需要实现的只有:
- 创建一个物理世界(世界设置重力加速度)
- 在物理世界中添加一个动态的刚体(小鸟)
- 在物理世界中添加一个静态的刚体(地板)和一个顶部边界(Edge)
- 在物理世界中添加一对浮动的刚体(Pipe),并设置线速度
- 设置每次点击屏幕小鸟上升的加速度
为了游戏的完整,我们还可以适当的添加一些功能进去:
- 添加主界面,主界面包含开始游戏,退出,查看历史最高分,游戏介绍等等
- 添加历史最高分界面
- 添加游戏介绍界面
- 添加游戏数据管理类
- 添加游戏控制和界面
在游戏设计部分,我们暂时分为下面的几个类:
GameUnit:游戏单元类
class unit
{
public:
void displayNowScore(float); //显示当前的成绩
cocos2d::Size winSize(); //屏幕的大小,并返回
cocos2d::Vec2 winOrigin(); //屏幕的原点坐标,并返回
cocos2d::Animation* gameAnimate(int); //创建动画帧,并返回
float scaleX(cocos2d::Sprite*, cocos2d::Size); //计算缩放比例,并返回比例。下同
float scaleY(cocos2d::Sprite*, cocos2d::Size);
void goNullptr(cocos2d::Ref* pSender);
//cocos2d::Sprite* createSprite(int);
};
MainMenu:游戏主界面类
class MainMenu : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene(); //创建场景
virtual bool init(); //初始化
void interfaceLayout(); //游戏主界面的布局函数
void goPlay(cocos2d::Ref*); //回调函数,进入游戏
void goScore(cocos2d::Ref*); //回调函数,进入成绩显示界面
void goAbout(cocos2d::Ref*); //回调函数,进入游戏关于界面
void goExit(); //0参回调函数,退出游戏
CREATE_FUNC(MainMenu);
};
GameScore:游戏成绩界面类
class GameScore : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
void scoreInterface(); //成绩界面布局函数
void goMainInterface(cocos2d::Ref*); //回调函数,回到主界面
CREATE_FUNC(GameScore);
};
GameAbout:游戏关于界面类
class GameAbout : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
void aboutInterface(); //关于界面布局函数
void goMainInterface(cocos2d::Ref*); //回调函数,回到主界面
CREATE_FUNC(GameAbout);
};
GamePlay:游戏核心类
class GamePlay : public cocos2d::Layer, public b2ContactListener
{
private:
void replaceBackground(int); //场景替换函数,还没完全实现
void tipInformation(); //玩的方法函数
void addBird(); //添加小鸟
void addLand(); //添加地面
void addPipe(float dt); //添加管道
void gameBegin(float dt); //游戏开始函数
void gameOver(); //游戏结束函数
void timeAnimate(); //游戏开始计时函数:1,2,3
void upperBoundary(); //游戏上边界函数
//int birdSelect(float); //小鸟种类选择函数
public:
static cocos2d::Scene* createScene();
virtual bool init();
void initPhysicsWorld(); //物理世界初始化函数
virtual void update(float); //计时器函数
/// Called when two fixtures begin to touch.
virtual void BeginContact(b2Contact* contact); //物理世界监听碰撞函数
/** Callback function for multiple touches began.
*
* @param touches Touches information.
* @param unused_event Event information.
* @js NA
*/
virtual void onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event); //触屏事件函数
void goPlay(cocos2d::Ref* pSender); //回调函数
void goExit(); //退出回调函数
CREATE_FUNC(GamePlay);
};
GameData:游戏数据处理类
class GameData
{
public:
static void initGameData(); //初始化游戏成绩数据
static int getGameData(); //取得游戏的最高成绩
static void keepGameData(int); //修改最高成绩函数
};
附上游戏图: