在cocos2d中检测触摸*屏幕上的任何位置*

问题描述:

我真的很抱歉,我意识到有几个关于cocos2d触摸检测的问题(包括this答案帮了我一大堆忙),但我无法让他们工作。我会评论我连接的答案,而不是问我自己的问题,但我没有足够的代表留下评论。在cocos2d中检测触摸*屏幕上的任何位置*

我想要做的就是当用户点击屏幕上的任何位置时停止动画。

这里是到目前为止我的代码:

- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"Touches Began"); 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView: [touch view]]; 
    location = [[Director sharedDirector] convertCoordinate: location]; 

    CGRect mySurface = (CGRectMake(100, 100, 320, 480)); 
    if(CGRectContainsPoint(mySurface, location)) { 
     NSLog(@"Event Handled"); 
     return kEventHandled; 
     [[Director sharedDirector] stopAnimation]; 
     } 
    return kEventIgnored; 
    NSLog(@"Event Ignored"); 

} 

我都试过BOOLvoidccTouchesBegantouchesBegan,在图层文件和文件cocosNode,和许多其他的事情。什么都没发生。日志中没有任何内容显示,并且动画继续其快乐的小路。我究竟做错了什么?

主要的问题是你得到了return kEventHandled;之后的[[Director sharedDirector] stopAnimation];而不是之前。 return只要它被调用就退出函数,所以之后的任何事情都不会到达。

我没有在我面前的Mac来检查你的代码的其余部分,但它似乎很好,所以我猜这是主要的问题。如果你甚至没有看到NSLog(@"Touches Began");,那么你需要确保你在CocosNode中这样做,它扩展了Layer

另一个有用的东西(一旦你看到触摸)为NSStringFromCGPoint功能,让您轻松显示,并在CGPoint调试值,所以你可以这样做:

NSLog(@"This layer was touched at %@", NSStringFromCGPoint(location)); 
+0

我对什么扩展意味着雾。我应该做@interface GameLayer:图层或@interface节点:CocosNode ? – Evelyn 2009-07-27 13:04:43