您的位置:首页 > 移动开发 > Cocos引擎

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

2014-09-08 20:14 330 查看
 通过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类实现菜单------>帮助页面的跳转方法  实现过程同上 此处留给动脑筋的你!

总结:以上我们实现了从菜单------>场景  场景------>菜单 相互跳转的方法 赶紧试一下吧!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: