cocos2d-x 3.2 |如何实现场景跳转

 通过cocos2d-x 3.2 Menu实现场景间跳转

前情提要:今天给大家带来一篇利用cocos2d-x 3.2 Menu方法实现场景间跳转的初级文章(老鸟飞过吧),
希望初学者一点一点积累,总会看到太阳!(废话少说,下面开始)


第一步:创建一个菜单类 我把他命名为 MenuScene 你呢?
       然后在菜单场景类MenuScene的头文件中 我们定义如下方法:

#include <stdio.h>
#include "cocos2d.h"
<pre name="code" class="cpp">#include "Help.h"
#include "Game.h"
using namespace cocos2d;class MainMenu:Layer{public: enum item_tag //利用枚举 实现多菜单项跳转 { c_menuitem_start=10, c_menuitem_help=11 }; CREATE_FUNC(MainMenu); static Scene * CreateScene();//创建菜单场景 bool init();//初始化 void menuCollBack(Ref * obj);//回调函数};
 
  
第二步:我们在MenuScene.cpp中实现.h文件定义的方法
#include "MainMenu.h"

Scene * MainMenu::CreateScene()
{
    //搭建场景
    auto scene=Scene::create();
    auto layer=MainMenu::create();
    scene->addChild(layer);
    return scene;
}
bool MainMenu::init()
{
    if (!Layer::init())
    {
        return false;
    }
    //添加菜单背景
    auto menubk=Sprite::create("loading.png");
    this->addChild(menubk);
    menubk->setAnchorPoint(Vec2(0, 0));
    menubk->setPosition(Vec2(0,0));
    //添加游戏logo
    auto gname=Sprite::create("logo_1.png");
    this->addChild(gname);
    gname->setPosition(Vec2(Director::getInstance()->getWinSize().width/2,
                            Director::getInstance()->getWinSize().height-100));

    //添加开始帮助
    auto label1=Label::createWithSystemFont("开始游戏","",40);
    label1->setColor(Color3B::GREEN);
    auto label2=Label::createWithSystemFont("帮助","",40);
    label2->setColor(Color3B::GREEN);
    //创建两个菜单条目 需回调函数声明
    auto menuItemStart=MenuItemLabel::create(label1, CC_CALLBACK_1(MainMenu::menuCollBack, this));//开始菜单
    menuItemStart->setPosition(Vec2(Director::getInstance()->getWinSize().width/2,
                                    880));
    menuItemStart->setTag(this->c_menuitem_start);
    auto menuItemHelp=MenuItemLabel::create(label2, CC_CALLBACK_1(MainMenu::menuCollBack, this));//开始菜单
    menuItemHelp->setPosition(Vec2(Director::getInstance()->getWinSize().width/2,
                                    750));
    menuItemHelp->setTag(this->c_menuitem_help);
    //创建菜单
    auto menu=Menu::create(menuItemStart,menuItemHelp,nullptr);//C11标准可以nullptr
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu);
    return true;
}
//实现回调方法 
 void MainMenu::menuCollBack(Ref * obj)
{
    auto nowItem=(MenuItemLabel *)obj;
    switch (nowItem->getTag()) {
        case c_menuitem_start://开始游戏 画面跳转道GAME场景
        {
            auto scened=Game::CreateScene();
            Director::getInstance()->replaceScene(TransitionFade::create(0.1,scened));
            break;
        }
        case c_menuitem_help://帮助 画面跳转到Help场景 
            auto scene=Help::CreateScene();
            Director::getInstance()->replaceScene(TransitionFade::create(0.1,scene));
            
            break;
    }
}

以上两步只是实现了菜单类的功能,如果在点击了按钮后跳转到新场景,我们需要创建一个Game、Help的类
第三步 我们创建一个Game场景类(表现菜单------>场景切换)
#include <stdio.h>
#include "cocos2d.h"
#include "cocos-ext.h"

USING_NS_CC;
using namespace cocos2d;
class Game:Layer
{
public:
    CREATE_FUNC(Game);
    static Scene * CreateScene();//创建Game场景
    bool init();//初始化场景
    void reCallBack(Ref * obj);//返回 回调函数
};

第四步 实现Game类中定义的如上方法
#include "Game.h"
#include "MainMenu.h"
USING_NS_CC;
Scene * Game::CreateScene()
{
    auto scene=Scene::create();//创建Game场景
    auto layer=Game::create();//创建Layer层
    scene->addChild(layer);//layer添加道scene中
    return scene;//返回场景
}
bool Game::init()
{
    if (!Layer::init())
    {
        return false;
    }
    
    //创建"文字"返回按钮
    auto menurt=MenuItemLabel::create(Label::createWithSystemFont("返回", "", 32),CC_CALLBACK_1(Game::reCallBack, this));
    menurt->setAnchorPoint(Vec2::ZERO);
    menurt->setPosition(600-30,Director::getInstance()->getWinSize().height-36);
    menurt->setColor(Color3B::GREEN);
    
    //创建菜单
    auto menu=Menu::create(menurt,nullptr);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu,2);
    return true;
}
//返回主菜单
void Game::reCallBack(Ref * obj)
{
    auto scene=MainMenu::CreateScene();
    Director::getInstance()->replaceScene(scene);
}

第四步: 创建一个Help类实现菜单------>帮助页面的跳转方法  实现过程同上 此处留给动脑筋的你!

总结:以上我们实现了从菜单------>场景  场景------>菜单 相互跳转的方法 赶紧试一下吧!!!

你可能感兴趣的:(enum,cocos2d,callback,label,menu)