分析Cocos2d-x 場景切換
本文三部分:
1.前言
2.選單按鈕執行場景切換
3.場景切換特效
1.前言
場景切換,我覺得可以分為兩種:
1)一種就是自動切換,比如玩遊戲碰到的,遊戲載入完成時的切換,這種一般有個事件觸發機制,本次暫先不講。
2)還有就是點選切換,比如點選某個按鈕,回撥函式時場景切換。
首先說一下,我們剛開始建立新的專案後,開始的HelloWorld場景是怎麼顯現出來的呢?
C++程式在執行時,首找main函式,可以發現,在新建專案中Classes裡面沒有main函式,難道Cocos2d-x沒有main函式嗎?當然...不是!
其實在win32目錄下,main.cpp和main.h
開啟main.cpp 可以看到:
|
最上面那三行,不用多說,接下來的using namespace cocos2d。然後是Cocos2d-x的入口 APIENTRY _tWinMain。接下來,看到了建立了AppDelegate物件,然後,run函式。
暫時先說到這,感興趣的,可以跟蹤一下,看具體有什麼,怎麼執行。
在AppDelegate類中,有個函式applicationDidFinishLaunching(),這個函式是程式啟動後呼叫的函式,一般在這個函式裡建立裝置與場景。
這裡我用的以前的專案,所以建立的場景不是HelloWorld的。
|
然後,我們可以看到 director->runWithScene。對的,控制場景執行是 導演在執行的。
2.選單按鈕的場景切換
現在來進行場景的切換吧,先要建立一個場景,這裡就用我以前建立的Welcomscene場景,在裡面加一個按鈕,通過按鈕的回撥函式跳轉到程式初始原有的HelloWorld場景中。
這裡,場景的跳轉也有不同方式:
①替換,就是用某個場景替換當前場景,原先場景就被釋放掉了。
②棧式,將現在的場景儲存,向入棧一樣,壓入棧中,顯示新場景,如果新場景釋放,將原場景顯示。原場景不釋放,耗記憶體大。
①替換
先演示,替換的,主要就是在回撥函式中導演的動作,我先在WelcomeScene場景中新建背景圖層即一個選單按鈕。
WelcomeScene.h:
|
WelcomeScene.cpp:
|
注意,要呼叫哪個場景時,不要忘了新增那個場景的標頭檔案。
主要看一下回調函式,建立HelloWorld場景,然後導演執行的replaceScene函式,所以是替換操作。
②棧換
然後再試一試,壓棧出棧的場景跳轉。
這時候,需要兩個場景的配合,以為這樣場景切換,主要用於遊戲進行時,點選暫停,我們需要將現在場景壓棧,然後彈出暫停介面,點選暫停介面返回,這時候就出棧,原場景重現。
這時候,我們改變一下,HelloWorld場景中,關閉按鈕的回撥函式,讓它進行導演的pop操作。
WelcomeScene.cpp,只有回撥函式改變了:
|
HelloWorldScene.cpp,也是隻有回撥函式改變:
|
我們可以Push很多個場景,每一次Pop恢復上一個,當然也可以通過 void popToRootScene() 來回到根場景,就是最初的場景。
這就是第二種進行入棧,出棧式的場景切換。
3.切換動畫效果
Cocos2d-x 引擎,對於切換場景提供了很多動畫效果。
我們來試一試吧。
|
在第一行建立了HelloWorld場景,在第二行建立動畫效果的場景,第三行導演類執行替換場景,用第二行建立的場景。
一般第二行的引數必要的為兩個(多長時間動畫(浮點型別),切換到的目標場景),第三個可選,一般都有,這次我用的動畫效果API裡是這樣的:
Orientation就是一些轉換方向的型別:
動畫效果還有很多:
|