以下内容轉載自:http://blog.sina.com.cn/s/blog_623ed7840100yhw9.html ,對原作者表示感謝。
簡介
Cocos2d中,CCLayer類被設計用來擷取觸摸資訊,該類實作了兩個協定:CCStandardTouchDelegate和CCTargetedTouchDelegate,我們可以使用這兩者中的任何一個來擷取觸摸事件。
CCLayer預設是不捕獲觸摸事件的,要使得其能夠捕獲到相應的觸摸實踐,我們需要将 isTouchEnabled 屬性設定成 YES:
self.isTouchEnabled = YES;
當設定好屬性後,就可以使用很多方法來捕獲觸摸事件。CCLayer預設使用的CCStandardTouchDelegate,該協定的方法有:
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
我們可以看到,該協定中的方法于CocoaTouch的用法類似,在這裡就不多說了。
除了CCStandardTouchDelegate,也可以使用CCTargetedTouchDelegate來捕獲觸摸。該協定定義如下:
@protocol CCTargetedTouchDelegate
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@optional
-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
-(void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
@end
使用CCTargetedTouchDelegate有兩點優點:
你不需要處理NSSets,事件的發送者已經将NSSets分割,確定在每次調用時有且隻有一個UITouch對象。
如果在ccTouchBegin中傳回True,就可以對目前的UITouch對象具有所有權,這樣就可以在後續的move/ended/cancelled方法中确認時目前的觸摸,這樣就可以在多點觸摸中減少工作量。
于通常直接在代碼中添加要響應的方法外,還需要多一步操作。CCLayer的定義中有一個函數:(以下是standard的方法)
該函數的作用就是指定需要使用哪種協定來處理觸摸事件,上述的代碼就是指定使用CCStandardTouchDelegate。為了不使用預設的協定,需要在CCLayer中重寫該函數:(以下是target方法)
經過修改後,就可以使用CCTargetedTouchDelegate來處理觸摸事件了。
target方法中,有三個參數,其中第二個參數很重要,指的是優先級,比如你有兩個Layer都設定了相應觸摸事件,那麼優先級高的,會先響應觸摸事件。(數值越低表示優先級越高)
本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366398,如需轉載請自行聯系原作者