標籤:資料 pause 複用 模式 get protocol .mm void 檔案
下面是Cocos2d-x的程式入口:
class AppDelegate : privatecocos2d::Application
{
public:
AppDelegate();
virtual ~AppDelegate();
virtual bool applicationDidFinishLaunching();
virtual void applicationDidEnterBackground();
virtual void applicationWillEnterForeground();
};
說明:
該類繼承了cocos2d::Application。
class CC_DLL Application :public ApplicationProtocol
.......
在每一個不同的平台都會ApplicationProtocol的實作類別,原始碼在:
cocos2d-x-3.0/cocos/2d/platform檔案夾下。大家能夠具體閱讀
各平台都會有自己的入口函數(比如main)
在main 中會建立一個某平台的表單,之後建立AppDelegate的執行個體,
所以在整個Cocos2d-x中AppDelegate就是一個單例模式:
static AppDelegate s_sharedApplication;(比方在在Mac平台的AppController.mm中)
然後在Application的實現中,例如以下:
Application* Application::sm_pSharedApplication =0;
Application::Application()
{
CC_ASSERT(!sm_pSharedApplication);
sm_pSharedApplication =this;
}
Application::~Application()
{
CC_ASSERT(this ==sm_pSharedApplication);
sm_pSharedApplication =0;
}
//3.0之後用這種方法
Application* Application::getInstance()
{
CC_ASSERT(sm_pSharedApplication);
returnsm_pSharedApplication;
}
我們在編程中僅僅須要定義這個類處理3個回調方法就好了,不同平台的表單訊息大概分了3種:
1。系統平台的表單建立完畢
2。系統通平台的表單被蓋住將進入後台執行
3。系統平台的表單恢複到前台
分別相應了AppDelegate中的幾個方法
virtual bool applicationDidFinishLaunching();
virtual void applicationDidEnterBackground();
virtual void applicationWillEnterForeground();
普通情況下在applicationDidFinishLaunching方法中:
1.初始化導演
2.建立第一個情境
3.啟動這個情境
然後,我們看Application中的run方法(是系統平台的main方法調用的該方法)
int Application::run()
{
if (applicationDidFinishLaunching())
{
[[CCDirectorCallersharedDirectorCaller] startMainLoop];
}
return 0;
}
因此,這種方法運行完畢後。Cocos2d-x就開始了主邏輯迴圈。
當android,ios平台來電話。就會有新表單蓋住當前表單,applicationDidEnterBackground就會被調用
當windows,mac平台最小化,applicationDidEnterBackground就會被調用
一般在這種方法中處理:
讓全部的螢幕動作停下來
讓全部的音樂和音效停下來
(有時候要儲存當前遊戲狀態持久化到磁碟)
applicationWillEnterForeground中處理
讓全部螢幕動作繼續
讓有音樂和音效繼續
(恢複使用者資料)
---------------------------------總結----------------------------
從這個角度看,學習Cocos2d-x要比學android ,ios還要簡單
onCreate
onStart
onResume
onPause
onStop
onDestroy
Android居然要搞這麼多。
Cocos2d-x 3.0final 終結者系列教程05-AppDelegate入口類