cocos2d-x中的場景切換是通過導演類調用相應的方法完成的,可以通過CCDirector::sharedDirector()->replaceScene()方法切換場景,參數是要切換的新場景,這種方法會釋放掉舊的場景。通過pushScene()切換則是將舊的場景壓入到棧中,以便通過popScene()函數出棧,繼續運行原場景。剛開始程序啟動的時候通過runWithScene()運行一個新的場景。下面通過代碼來說明。單擊下圖可以查看效果。
這次代碼一共建立了倆個場景,一個是原來的helloworld場景,一個是SecondScene場景。具體的看代碼吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#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(); } |