首先來講下什麼是單例:
單例模式是設計模式中最簡單的形式之一。這一模式的目的是使得類的一個對象成爲系統中的惟一實例。 單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行建立這個實例;三是它必須自行向整個系統提供這個實例。
上面這段話講的很嚴謹,很抽象有木有!沒錯,你猜對了,它來自百度百科... 下面我用簡短、無科學依據的語言組織一下 : css
假如你是個一個男的,可是你私生活不能自理:不會煮飯,洗衣服,穿的衣服永遠都no fashion。這時候你須要什麼?沒錯,須要一個女友!但這個女友你該怎麼「使用」呢?給你如下兩種選擇:
一、要洗衣服的時候「建立」一個女友(也就是去找一個女友),洗完後將女友甩了;當你要作飯,繼續「建立」一個女友,作完後甩掉;甚至是當你須要知足某種不可告人的需求時,你須要「建立」一個女友...而後..
二、找一個能夠過一生的女友,永遠在一塊兒,你若不離,她便不棄!想怎麼用就怎麼用,省去了相親等一系列麻煩!
以上兩種方法雖然均可以讓你告別你的右手,可是第一種方法的前提條件太誇張了:你要是一個高富帥,像博主這樣的。呵呵。呵呵
因此,仍是選第二種吧,也就是咱們所說的單例模式,你想甩也甩不掉。
好了,言歸正傳,爲何咱們要用單例來設計遊戲呢,參考這句話:
衆所周知,遊戲開發中離不開遊戲數據保存和加載。這些數據包括關卡數據、遊戲進行中的狀態數據等。這樣一些信息不少遊戲模塊中都須要訪問,因此能夠爲之設置一個單例對象。我武斷地認爲,客戶端遊戲開發中,至少須要一個單例對象。由於一個全局的訪問點能夠方便不少對象之間的交互。
-----------------------------------------------------
下面介紹單例的簡單使用方法:
一、聲明一個類:
設計模式
class TestSingleton : public cocos2d::Layer{public: static TestSingleton* getInstance();//建立一個全局訪問點,例如咱們經常使用的Director::getInstance()就是這樣一個單例 void test();//測試單例時用到。private: static TestSingleton* m_singleton;};
二、定義實現:
測試
TestSingleton* TestSingleton::m_singleton = nullptr;//m_singleton指向空指針TestSingleton* TestSingleton::getInstance() { //判斷m_singleton是否已被實例化, 若是沒有,將之實例 if(nullptr == m_singleton) { m_singleton = new TestSingleton();// } return m_singleton; }void TestSingleton::test() { CCLOG("test testSingleton success~~"); }
三、測試單例
我直接在HelloWorld這裏測試。代碼以下: spa
bool HelloWorld::init() { TestSingleton::getInstance()->test();//調用TestSingleton裏的test(),看控制檯是否輸出success}
很明顯是成功的,我就不貼結果啦。設計