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 ...