溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cocos2dx基礎篇(28)——單例模式

發布時間:2020-09-19 06:28:04 來源:網絡 閱讀:2797 作者:shahdza 欄目:開發技術

【嘮叨】

    單例模式,說的通俗一點就是:創建某個類的全局唯一靜態實例對象。也就是說從它創建開始,一直到整個游戲程序結束才會釋放資源,期間一直保存的著數據。

    單例類在大部分游戲中應該是必不可少的部分,如整個游戲音樂的開關控制、數據的加載與存儲等都需要一個全局訪問點來控制,那就需要用到單例類了。


【致謝】

    http://blog.csdn.net/star530/article/details/22610229


【3.x】

    shared***() 改為 getInstance() 。




【單例模式】

    有一個很形象的比喻,摘自:http://blog.csdn.net/star530/article/details/22610229

    假如你是一個男的,但是你私生活不能自理:不會煮飯,洗衣服,穿的衣服永遠都no fashion。

    這時候你需要什么?沒錯,需要一個女朋友!但這個女朋友你該怎么“使用”呢?

    給你以下兩種選擇:

    (1)要洗衣服的時候“創建”一個女朋友(也就是去找一個女朋友),洗完后將女朋友甩了;

         當你要做飯,繼續“創建”一個女朋友,做完后甩掉;

         甚至是當你需要滿足某種不可告人的需求時,你需要“創建”一個女朋友...然后...

    (2)找一個可以過一輩子的女朋友,永遠在一起,你若不離,她便不棄!

         想怎么用就怎么用,省去了相親等一系列麻煩!

    以上兩種方法雖然都可以讓你告別你的右手,但是第一種方法的前提條件太夸張了:你要是一個高富帥,像博主這樣的,呵呵呵呵。

    所以,還是選第二種吧,也就是我們所說的單例模式,你想甩也甩不掉。


1、cocos2dx中的單例模式

    cocos2dx中其實存在很多的單例類,相信大家也都接觸過。

    例如:CCDirector、SimpleAudioEngine、CCUserDefault、CCSpriteFrameCache等都是用了單例模式,并可以通過shared***()來獲取單例對象,如CCDirector::sharedDirector()。


2、創建單例類

    2.1、聲明.h

//
	class Global : cocos2d::CCObject {

	private:
		static Global* m_global;      //唯一靜態實例對象m_global

	public:
		static Global* shareGlobal(); //獲取全局訪問點m_global

	//其他屬性函數的聲明
	//......
	};
//


    2.2、定義實現.cpp

//
	//初始化單例唯一實例對象m_global
	Global* Global::m_global = NULL;

	//獲取全局訪問點
	Global* Global::shareGlobal() 
	{
		//判斷m_global是否已被實例化,如果沒有,將之實例  
		if(m_global == NULL) {
			m_global = new Global();
		}
		return m_global;
	}

	//其他函數的定義實現
	//......
//



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女