我有几个图层,并添加了一些精灵;试图以这种方式访问它们:
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
if(CGRectContainsPoint([[self getChildByTag:tagNumber] boundingBox], location)) {
CCLOG(@"You've touched the sprite!");
}
}
一个奇怪的事情是,我们没有这个方法:
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
return YES;
}
当我触摸屏幕时,我的应用程序崩溃了。知道是什么吗?更新:
-(void) registerWithTouchDispatcher
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self
priority:0 swallowsTouches:YES];
}
如果你收到ccTouchBegan事件,但不是ccTouchesBegan(注意复数),你正在使用CCTargetedTouchDelegate协议。你可能已经用CCTouchDispatcher addTargetedDelegate注册了你的类,因此必须坚持使用CCTargetedTouchDelegate协议,其方法是ccTouchXXXX的单一版本,而不是ccTouchesXXXX。
你也应该注意Xcode给你的警告。如果你不实现ccTouchBegan我敢肯定,一个"可能不响应选择器"的警告可能会出现。所有的警告都应该认真对待(事实上,我建议打开"将所有警告视为错误")。
控制台中产生任何错误?关于无法识别的选择器?我接触cocos2D已经有一段时间了,但你应该检查一下第二种方法是否覆盖了第一种方法。如果它确实存在,那么当它不存在时,您的程序将使用第一个(返回void的那个),从而在代码实现中遇到实际的错误。我会在第一行设置一个断点'-(void)ccTouchesBegan:(NSSet *) touchwithevent:(UIEvent *)事件',删除返回BOOL的函数,然后我会一步一步地看到使用调试器时会发生什么。
请张贴你的控制台日志。我相信你应该有一个"选择器未找到","子未找到"或"无效参数异常由于无参数"的问题。
只是一个想法。