• Cocos2d之FlyBird开发---简介


    |   版权声明:本文为博主原创文章,未经博主允许不得转载。

     

    开发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);                        //修改最高成绩函数
    
    };
    

    附上游戏图:

  • 相关阅读:
    #333 Div2 Problem B Approximating a Constant Range(尺取法)
    苦逼的单身狗(玄乎的尺取大法)
    欧拉项目第四题之三位数之积数的最大回数
    欧拉项目第三题之最大质数因子
    关于尺取法的认识与简单例题
    codeforces 980B Marlin
    康托展开和逆康托展开
    Chrome控制台中Network的Preview与Response区别
    配置Express中间件
    Express中间件简介
  • 原文地址:https://www.cnblogs.com/geore/p/5800009.html
Copyright © 2020-2023  润新知