在使用cocos2d開發遊戲時,免不了要涉及到touch事件。
使用cclayer時,可以簡單的設定self.istouchenable = yes,然後改寫 – (void)cctouchesbegan:(nsset *)touches withevent:(uievent *)event 方法,即可實現觸控事件的接收及處理。
但如果使用ccsprite甚至ccnode時,則必須手動新增**協議才可以接收事件。 協議的具體使用方法網上有很多,這裡就不再贅述.
我主要說一下,使用這種方法時需要注意的一點。 當使用cctouchdispatcher的
-(void) addtargeteddelegate:(id) delegate priority:(int)priority swallowstouches:(bool)swallowstouches 或
-(void) addstandarddelegate:(id) delegate priority:(int)priority
新增事件**後,請勿必記得,在release前,刪除新增的** 否則會出現無法釋放記憶體的現象
具體表現為: 假設a場景中某層使用了[[cctouchdispatcher shareddispatcher] addtargeteddelegate:self priority:0touches:yes]
將自身新增為觸控事件接收者 而在切換至場景b時,沒有將該**刪除,則場景b中的touch事件接收者仍然會被場景a中該層接收,
即,場景a未能完全釋放記憶體。
解決方法:旦凡顯示新增**的層,在退出前也需要顯示刪除 可以在 onexit函式中進行刪除
– (void)onexit {
// 刪除touch**
[[cctouchdispatcher shareddispatcher] removedelegate:self];
//別忘了呼叫父類的onexit方法
[super onexit];
cocos2d 事件處理
定義事件分發器 使用系統自帶事件 觸控螢幕,鍵盤響應等 或者是自己定義事件 定義事件 監聽相關事件 定義響應函式,作為事件觸發後 做出的反應 定義事件分發器auto dispatcher director getinstance geteventdispatcher 或者 eventdispatch...
cocos2d實現語音 Cocos2d 聲音API
param url 聲音路徑 cc.audioengine.playmusic url loop 停止背景 param releasedata 是否釋放聲音資料,預設為false cc.audioengine.stopmusic releasedata 暫停背景 cc.audioengine.pau...
cocos2d筆記 cocos2d的單例模式
cocos2d充分使用了單例設計模式,這裡有必要提及它是因為它是經常是討論熱點。大體上說,乙個singleton是乙個類,它在應用使用期中僅僅例項化一次。為了確保如此,就要使用乙個既建立又訪問此物件例項的靜態方法。因此,你不使用alloc init或者靜態自動釋放初始化器 static autore...