cocos2d-x中的單例模式運用
阿新 • • 發佈:2019-02-14
單例模式是什麼我就不贅述了,直接進入正題。
我們在C++往往能用到單例模式,但在cocos2d-x中,運用單例模式時,您是否遇到了麻煩,各種“無法解析”,“error LNK"錯誤出來。
下面我用個例子簡單介紹下單例模式在cocos2d-x是如何編寫的:
這裡我編寫一個類Global,用來儲存遊戲中全域性都可以訪問的唯一變數,這就要求我們隨時可以在任意物件中能訪問Global,來讀取裡面儲存的唯一變數
標頭檔案如下:
#ifndef _GLOBAL_H_ #define _GLOBAL_H_ #include "cocos2d.h" #include "StartLayer.h" class Global{ public: StartLayer* startLayer; //儲存全域性可以訪問的唯一性變數 static Global* toIns(); //通過這個方法返回Global物件 protected: ~Global(); }; #endif
Cpp檔案如下:
#include "Global.h"
using namespace cocos2d;
static Global* share=NULL; //這行非常重要,我們之前犯的錯誤就是C++習慣,將此變數宣告和初始化放在標頭檔案中,導致錯誤
Global::~Global(void){
startLayer = NULL;
}
Global* Global::toIns(){
if(!share){
share = new Global();
CCLOG("first");
}
CCLOG("hello");
return share;
}
也可以這樣做:
標頭檔案如下:
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#include "cocos2d.h"
#include "StartLayer.h"
class Global{
public:
StartLayer* startLayer;
static Global* toIns();
static Global* share; //靜態變數宣告在這裡
protected:
~Global();
};
#endif
CPP檔案如下:
#include "Global.h" using namespace cocos2d; //static Global* share=NULL; Global* Global::share = NULL; //靜態變數初始化放在這,而不是放在標頭檔案中 Global::~Global(void){ startLayer = NULL; } Global* Global::toIns(){ if(!share){ share = new Global(); CCLOG("first"); } CCLOG("hello"); return share; }
將程式碼運用到你的工程中,你學會了嗎?
例外你也可以參考cocos2d-x中本身的單例(例如CCDirector)裡面的程式碼,它們是如何例項單例的