在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");
}
我都试过BOOL
和void
,ccTouchesBegan
和touchesBegan
,在图层文件和文件cocosNode,和许多其他的事情。什么都没发生。日志中没有任何内容显示,并且动画继续其快乐的小路。我究竟做错了什么?
答
主要的问题是你得到了return kEventHandled;
之后的[[Director sharedDirector] stopAnimation];
而不是之前。 return
只要它被调用就退出函数,所以之后的任何事情都不会到达。
我没有在我面前的Mac来检查你的代码的其余部分,但它似乎很好,所以我猜这是主要的问题。如果你甚至没有看到NSLog(@"Touches Began");
,那么你需要确保你在CocosNode
中这样做,它扩展了Layer
。
另一个有用的东西(一旦你看到触摸)为NSStringFromCGPoint
功能,让您轻松显示,并在CGPoint
调试值,所以你可以这样做:
NSLog(@"This layer was touched at %@", NSStringFromCGPoint(location));
我对什么扩展意味着雾。我应该做@interface GameLayer:图层或@interface节点:CocosNode ? –
Evelyn
2009-07-27 13:04:43