cocos2d筆記 cocos2d的單例模式

2021-09-06 04:59:31 字數 1517 閱讀 6329

cocos2d充分使用了單例設計模式,這裡有必要提及它是因為它是經常是討論熱點。大體上說,乙個singleton是乙個類,它在應用使用期中僅僅例項化一次。為了確保如此,就要使用乙個既建立又訪問此物件例項的靜態方法。因此,你不使用alloc/init或者靜態自動釋放初始化器(static autorelease initializer),而是使用以shared開通的方法來訪問乙個單例物件。這裡有一些cocos2d最常用的單例方法,並告訴你怎麼訪問:

ccactionmanager

*sharedmanager

=[ccactionmanager sharedmanager]; 

ccdirector

*shareddirector

=[ccdirector shareddirector]; 

ccspriteframecache

*sharedcache

=[ccspriteframecache sharedspriteframecache];

cctexturecache

*sharedtexcache

=[cctexturecache sharedtexturecache]; 

cctouchdispatcher

*shareddispatcher

=[cctouchdispatcher shareddispatcher];

cdaudiomanager

*sharedmanager

=[cdaudiomanager sharedmanager]; 

******audioengine

*sharedengine

=[******audioengine sharedengine];

複製**

static

mymanager

*sharedmanager

=nil;

+ (mymanager

*) sharedmanager

return

sharedmanager;

}

複製**

不過單例模式也有差勁一面。因為他們易於使用和實現,並能從任何其他類訪問,那就有在不該使用的地方出現的可能。

例如,你可能認為你只有乙個player物件,那麼為什麼不把他作為單例呢?皆大歡喜,但是,你會意識到每當player從一關公升級到另一關的時候,這個單例不僅保留著原有的分數,而且保留了他的最近動畫狀態、生命值以及一切帶著的專案,甚至它會以狂暴模式開始新一關,只因為他離開上一關的時候這個模式是活動的。

為了修正此誤,你就要新增乙個方法在進另一關的時候去重置某些變數。到目前還好,但是當你在遊戲中新增更多特性時,你就會停下來不得不新增和維護越來越多的變數。更糟糕的是,設想某天乙個朋友建議你給ipad來乙個雙人模式的版本。但是,等等,你的player是單例,你在任何時候都只能是唯一的!這讓你很頭大:重構大量**還是錯失雙人模式的大好機會?

你越依賴單例模式,你面臨的問題就越多。在常見乙個單例類前,一定要考慮好是否你真的需要這個類的唯一例項,是否後面會有修改。

cocos2d實現語音 Cocos2d 聲音API

param url 聲音路徑 cc.audioengine.playmusic url loop 停止背景 param releasedata 是否釋放聲音資料,預設為false cc.audioengine.stopmusic releasedata 暫停背景 cc.audioengine.pau...

cocos2d 學習筆記 2

ccspritebatchnode的作用很像cclayer,因為它本身並不顯示在螢幕上。不過 你只能把ccsprite加入ccspritebatchnode。ccspritebatchnode 將乙個檔名作為引數,使用這個引數的原因是所有被新增進 ccspritebatchnode的ccsprite...

cocos2d學習筆記

粒子系統,使用系統自己的粒子系統的書寫方法 if cclayer init return false cctexture2d fire cctexturecache sharedtexturecache addimage fire.png ccparticlesystem firepartical ...