2

真的很抱歉,我意识到有几个关于 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");

}

我已经在 layer 文件和 cocosNode 文件中尝试了BOOLand voidccTouchesBeganand ,以及许多其他东西。touchesBegan没发生什么事。日志中没有显示任何内容,动画继续其快乐的小路。我究竟做错了什么?

4

1 回答 1

2

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

我面前没有我的 mac 来检查你的其余代码,但它看起来很好,所以我猜这是主要问题。如果您甚至没有看到,NSLog(@"Touches Began");那么您需要确保您在CocosNode扩展中执行此操作Layer

另一个有用的东西(一旦你看到触摸)是NSStringFromCGPoint函数,它允许您轻松显示和调试 a 中的值CGPoint,因此您可以执行以下操作:

NSLog(@"This layer was touched at %@", NSStringFromCGPoint(location));
于 2009-07-26T03:57:29.597 回答