views:

36

answers:

1

I'm writing an iPhone app, and I want to handle multitouches. I'm using cocos2d libs. So I've made a CCLayer subclass and set it to be a CCStandartTouchDelegate. For some reason I don't want to use UIGestureRecognizer and to build a correct logic I should know the answers for these questions:

  1. If I tap the screen with one finger, and then with the other one. How many touches will be caught in ccTouchesBegan?

  2. If I tap the screen with two fingers and then will move only one of them. How many touches will be caught in ccTouchesMoved?

+3  A: 

The best thing to do when you have a question like this is just to implement the callbacks, and in the implementation, log the parameters. For example:

- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // Log everything (there will be repetition because the event contains the set of touches):
    NSLog(@"ccTouchesBegan: touches = %@; event = %@", touches, event);

    // Or, just log the number of touches to simplify the output:
    NSLog(@"ccTouchesBegan: %d touches", [touches count]);

    return kEventHandled;
}

Then just run your app and experiment, watching the log. You'll learn more this way (and faster) than you will by asking here.

But to answer your specific questions:

  1. You should get one call to ccTouchesBegan for each tap (even if the first finger is still down when the second tap occurs). If the two fingers hit simultaneously, you'll get one call with two touches.

  2. You'll get repeated calls to ccTouchesMoved each time one or more of the fingers moves. If only one finger is moving, each call will be passed a single touch. Stationary fingers will not generate events until they are moved or lifted.

Of course, remember to set isTouchEnabled = YES for your CCLayer or you won't get any callbacks at all.

dwineman