Cocos2d-x UI開辟之場景切換代碼實例。本站提示廣大學習愛好者:(Cocos2d-x UI開辟之場景切換代碼實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Cocos2d-x UI開辟之場景切換代碼實例正文
cocos2d-x中的場景切換是經由過程導演類挪用響應的辦法完成的,可以經由過程CCDirector::sharedDirector()->replaceScene()辦法切換場景,參數是要切換的新場景,這類辦法會釋放失落舊的場景。經由過程pushScene()切換則是將舊的場景壓入到棧中,以便經由過程popScene()函數出棧,持續運轉原場景。剛開端法式啟動的時刻經由過程runWithScene()運轉一個新的場景。上面經由過程代碼來講明。單擊下圖可以檢查後果。
此次代碼一共樹立了倆個場景,一個是本來的helloworld場景,一個是SecondScene場景。詳細的看代碼吧。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
CCLabelTTF * ttf = CCLabelTTF::create("next scene","Arial",32);
//為該場景添加一個label菜單
CCMenuItemLabel * labelMenu = CCMenuItemLabel::create(ttf,this,menu_selector(HelloWorld::menuCloseCallback));
CCMenu * menu = CCMenu::create(labelMenu,NULL);
this->addChild(menu);
bRet = true;
} while (0);
return bRet;
}
//該函數完成場景的切換
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
//應用以下的場景切換類可以發生特別的後果,這些類有許多,普通有倆個或許是三個參數,第一個參數是
//時光,第二個參數是要切換到的場景,第三個參數依據類的分歧各不雷同,這個淡入淡出的後果第三個參數是色彩
CCTransitionFade * fade = CCTransitionFade::create(2.0,SecondScene::scene(),ccc3(255,100,100));
CCDirector::sharedDirector()->replaceScene(fade);
//也能夠采取以下的辦法
//CCDirector::sharedDirector()->pushScene(fade);
}
以下是SecondScene.cpp
#include "SecondScene.h"
#include "HelloWorldScene.h"
CCScene * SecondScene::scene()
{
CCScene * scene = NULL;
do
{
scene = CCScene::create();
CC_BREAK_IF(!scene);
SecondScene * layer = SecondScene::create();
CC_BREAK_IF(!layer);
scene->addChild(layer);
}
while(0);
return scene;
}
bool SecondScene::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(!CCLayer::init());
CCLabelTTF * ttf = CCLabelTTF::create("first scene","Arial",32);
CCMenuItemLabel * labelMenu = CCMenuItemLabel::create(ttf,this,menu_selector(SecondScene::changeScene));
CCMenu * menu = CCMenu::create(labelMenu,NULL);
this->addChild(menu);
bRet = true;
}
while(0);
return bRet;
}
void SecondScene::changeScene(CCObject * sender)
{
//應用CCTransitionPageTurn類須要先設置攝像機
CCDirector::sharedDirector()->setDepthTest(true);
//第三個參數為false表現向前翻頁,為true表現向後翻頁
CCTransitionPageTurn * pageTurn = CCTransitionPageTurn::create(2.0,HelloWorld::scene(),false);
CCDirector::sharedDirector()->replaceScene(pageTurn);
//采取以下的辦法就沒有殊效了
//CCDirector::sharedDirector()->popScene();
}