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();}
新聞熱點
疑難解答
圖片精選