zoukankan      html  css  js  c++  java
  • Cocos2d 之FlyBird开发---MainMenu类

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

      MainMenu类主要实现的是游戏主界面的布局,它相当于一个港口,有开向各处的航道,而游戏中的MainMenu则是有跳转到各个场景的一个集合点。

      下面贴上代码:

    MainMenu.h

    #ifndef _MAIN_MENU_H_
    #define _MAIN_MENU_H_
     
    ////////////////////////////////////////////////////////////////
    //            这里主要的是实现主界面的一些操作
    #include "cocos2d.h"
    USING_NS_CC;
     
    class MainMenu : public cocos2d::Layer
    {
    private:
         cocos2d::Sprite* background;
         cocos2d::MenuItemImage* playItem;
         cocos2d::MenuItemImage* scoreItem;
         cocos2d::MenuItemImage* aboutItem;
         cocos2d::MenuItemImage* exitItem;
         cocos2d::Sprite* logo;
         cocos2d::Sprite* bird;
         cocos2d::Sprite* land;
    public:
         static cocos2d::Scene* createScene();
         virtual bool init();
         void interfaceLayout();
         void goPlay(cocos2d::Ref*);
         void goScore(cocos2d::Ref*);
         void goAbout(cocos2d::Ref*);
         void goExit();
         CREATE_FUNC(MainMenu);
    };
     
    #endif // _MAIN_MENU_H_

    MainMenu.cpp

    #include "MainMenu.h"
    #include "GameUnit.h"
    #include "GameAbout.h"
    #include "GameScore.h"
    #include "GamePlay.h"
    #include "GameData.h"
     
    unit u;
     
    //创建一个游戏场景
    cocos2d::Scene* MainMenu::createScene()
    {
         auto scene = Scene::create();
         auto layer = MainMenu::create();
         scene->addChild(layer);
         return scene;
    }
     
    //初始化
    bool MainMenu::init()
    {
         if (!Layer::init())
         {
                  return false;
         }
         
         //设置主界面的背景音乐
         
         //初始化游戏数据
         if (!GameData::getGameData())
         {
                  GameData::initGameData();
         }
         //布局主界面
         this->interfaceLayout();
     
         return true;
    }
     
    //游戏界面布局
    void MainMenu::interfaceLayout()
    {
         //1: add background
         background = Sprite::create("background/light.png");
         background->setPosition(Vec2(u.winOrigin().x + u.winSize().width / 2,
                  u.winOrigin().y + u.winSize().height / 2));
         background->setScale(u.scaleX(background, u.winSize()),
                  u.scaleY(background, u.winSize()));
         this->addChild(background, 0);
     
         //2: add FlyBird logo
         logo = Sprite::create("logo/title.png");
         logo->setPosition(Vec2(u.winOrigin().x + u.winSize().width / 2,
                  u.winOrigin().y + u.winSize().height - 2 * logo->getContentSize().height));
         logo->setScale(1.5);
         this->addChild(logo, 1);
     
         //3: add wall
         land = Sprite::create("background/land.png");
         land->setPosition(Vec2(u.winOrigin().x + u.winSize().width / 2,
                  u.winOrigin().y + land->getContentSize().height / 2));
         land->setScaleX(u.winSize().width / 1.5*land->getContentSize().width);
         //land->setScaleY(1.5*u3.winSize().height / backgroundA->getContentSize().height);
         land->setScaleY(u.winSize().height / (land->getContentSize().height * 3));
         this->addChild(land);
     
         //4: add bird animation
         bird = Sprite::create("bird/littleBird.png");
         bird->setPosition(Vec2(u.winOrigin().x + u.winSize().width / 2,
                  u.winOrigin().y + (u.winSize().height / 3) * 2));
         bird->setScale(2);
         auto repeat = RepeatForever::create(Animate::create(u.gameAnimate(1)));
         bird->runAction(repeat);
         this->addChild(bird);
     
         //5: add about button
         aboutItem = MenuItemImage::create(
                  "button/about.png",
                  "button/buttom.png",
                  CC_CALLBACK_1(MainMenu::goAbout, this));
         aboutItem->setPosition(Vec2(u.winOrigin().x + u.winSize().width - aboutItem->getContentSize().width / 2,
                  u.winOrigin().y + aboutItem->getContentSize().height / 2));
         auto m = Menu::create(aboutItem, NULL);
         m->setPosition(Vec2::ZERO);
         this->addChild(m, 2);
     
         //6: add play button
         playItem = MenuItemImage::create(
                  "button/play.png",
                  "button/play.png",
                  CC_CALLBACK_1(MainMenu::goPlay, this)
                  );
     
         //7: add score button
         scoreItem = MenuItemImage::create(
                  "button/score.png",
                  "button/score.png",
                  CC_CALLBACK_1(MainMenu::goScore, this)
                  );
     
         auto menu = Menu::create(playItem, scoreItem, NULL);
         menu->alignItemsHorizontallyWithPadding(10);
         menu->setPosition(u.winOrigin().x + u.winSize().width - menu->getContentSize().width/4,
                  u.winOrigin().y + 1.7*menu->getContentSize().height/3);
         menu->setScale(1.5);
         this->addChild(menu, 2);
     
         //exit
         exitItem = MenuItemImage::create(
                  "button/exit_f.png",
                  "button/exit_b.png",
                  CC_CALLBACK_0(MainMenu::goExit, this)
                  );
         Menu* exitMenu = Menu::create(exitItem, NULL);
         exitMenu->setPosition(Vec2(u.winOrigin().x + exitItem->getContentSize().width / 2,
                  u.winOrigin().y + exitItem->getContentSize().height / 2));
         this->addChild(exitMenu, 7);
    }
     
    void MainMenu::goPlay(cocos2d::Ref* pSender)
    {
         Director::getInstance()->replaceScene(TransitionFadeTR::create(1,
                  GamePlay::createScene()));
    }
     
    void MainMenu::goScore(cocos2d::Ref* pSender)
    {
         Director::getInstance()->replaceScene(TransitionFadeTR::create(1,
                  GameScore::createScene()));
    }
     
    void MainMenu::goAbout(cocos2d::Ref* pSender)
    {
         Director::getInstance()->replaceScene(TransitionFadeTR::create(1,
                  GameAbout::createScene()));
    }
     
    void MainMenu::goExit()
    {
         Director::getInstance()->end();
    }

    每个函数的功能见Cocos2d之FlyBird开发---简介

    效果图:

  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/geore/p/5800053.html
Copyright © 2011-2022 走看看