CCLayer中使用registerWithTouchDispatcher註冊CCTouchDispatcher
在CCLayer中經常要註冊CCTouchDispatcher來讓Layer處理Touch事件。
1.設定
self.isTouchEnabled=YES;
2. 一般情況下我都是在init裡面寫上如下代碼來讓Layer註冊到CCTouchDispatcher:
CCTouchDispatcher* dispatch = [CCTouchDispatcher sharedDispatcher];
[dispatch addTargetedDelegate:self priority:INT32_MIN+1 swallowsTouches:YES];
然後在dealloc中寫上如下代碼來讓Layer從CCTouchDispatcher中移除:
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
或者 在OnEnter中 註冊,在OnExit中移除註冊。
3.現在發現一個更好的辦法,直接重寫 CCLayer的
registerWithTouchDispatcher方法,代碼如下:
-(void) registerWithTouchDispatcher
{
CCTouchDispatcher* dispatch = [CCTouchDispatcher sharedDispatcher];
[dispatch addTargetedDelegate:self priority:INT32_MIN+1 swallowsTouches:YES];
}
查看CCLayer中對registerWithTouchDispatcher的相關調用,可以看到在CCLayer中的OnEnter中調用了
registerWithTouchDispatcher,而在OnExit也實現了對self在 CCTouchDispatcher中的移除。
所以只要實現registerWithTouchDispatcher就好了,其他都不需要操心,也不需要關心self在 CCTouchDispatcher中的移除。