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(); }