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];
[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中的移除。