Reputation: 2656
I'm really sorry, I realize there have been several questions asked about cocos2d touch detection (including this answer which helped me a bunch), but I just can't get any of them to work. I would have commented on the answer I linked instead of asking my own question, but i don't have enough rep to leave comments.
All I want to do is stop animation as soon as a user taps anywhere on the screen.
Here's my code so far:
- (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");
}
I've tried both BOOL
and void
, ccTouchesBegan
and touchesBegan
, in a layer file and a cocosNode file, and many other things. Nothing happens. Nothing shows in the log, and the animation continues on its merry little way. What am I doing wrong?
Upvotes: 2
Views: 4071
Reputation: 844
The main problem is that you've got the [[Director sharedDirector] stopAnimation];
after the return kEventHandled;
rather than before it. return
exits the function as soon as it's called, so anything after it will never get reached.
I don't have my mac in front of me to check the rest of your code, but it seems fine, so I'm guessing that's the main problem. If you're not even seeing the NSLog(@"Touches Began");
then you need to make sure that you're doing this in a CocosNode
that extends Layer
.
Another useful thing(once you're seeing the touches) is the NSStringFromCGPoint
function, which allows you to easily display and debug the values in a CGPoint
, so you could do something like:
NSLog(@"This layer was touched at %@", NSStringFromCGPoint(location));
Upvotes: 2