我有一个完整的画布 CCLayer,上面有几个小的 CCLayer——它们是按钮。在按钮上我启用了触摸监听器:
- (id)init {
if ((self = [super init])) {
[self setTouchEnabled:YES];
}
return self;
}
首先我尝试了默认的触摸处理程序:
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"This is me: %d", self->button_id);
}
奇怪的结果是无论我在哪里触摸它总是触发所有按钮触摸处理程序,即使我触摸一个干净的区域,什么都不应该被调用。
我正在阅读文档和博客,但似乎没有什么是直接的解决方案。我还通过添加尝试了单点触摸处理程序:
- (void)onEnterTransitionDidFinish {
[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:1 swallowsTouches:YES];
}
- (void)onExit {
[[CCDirector sharedDirector].touchDispatcher removeDelegate:self];
}
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
NSLog(@"This is me: %d", self->button_id);
}
在这种情况下,唯一的区别是我只触发了 1 个侦听器——总是我定义的最后一个侦听器——而且无论触摸发生在哪里。
在我看来,问题不在于事件委托,而在于 CCLayer 边界。这就是我设置大小的方式:
self.contentSize = CGSizeMake(10.0f, 10.0f);
你知道我哪里出错了吗?也许我错过了一些重要的东西。
谢谢!