pacman.
pacman.

Reputation: 227

How to implement Cocos2d multitouch sprite rotation?

I have already implemented multitouch image rotation using standard iOS graphics library (Core Graphics).

It looks like this:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([touches count] == 2) {
        NSArray *twoTouches = [touches allObjects];
        UITouch *first = [twoTouches objectAtIndex:0];
        UITouch *second = [twoTouches objectAtIndex:1];

        CGFloat currentAngle = angleBetweenLinesInRadians([first previousLocationInView:self.view], [second previousLocationInView:self.view], [first locationInView:self.view], [second locationInView:self.view]);

        pic1.transform = CGAffineTransformRotate(pic1.transform, currentAngle);

    }
}

Now I'm trying to implement this solution in my Cocos2d project. First I registered the CCTouchDispacher in my init method.

- (id) init
{
    ...
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    ...
}

In my ccTouchMoved function I changed (UITouch *) to (NSSet *) and built the project just to be sure everything was correct. As a result I got following warning: "Incompatible Objective-C types initializing 'struct NSSet *', expected 'struct UITouch *'".

As everything still seemed to be working correctly I moved on and tried to extract first and second touch objects from (NSSet *) touch.

- (void)ccTouchMoved:(NSSet *)touch withEvent:(UIEvent *)event {
    if ([touch count] == 2) {
        NSArray *twoTouches = [touch allObjects];
        UITouch *first = [twoTouches objectAtIndex:0];
        UITouch *second = [twoTouches objectAtIndex:1];
    }

}

Now I tried to compile it, which worked, but after I triggered ccTouchMoved through iPhone simulator, I got following error message: "-[UITouch count]: unrecognized selector sent to instance 0x542d6a0'".

Can somebody please explain, how to get this Cocos2d ccTouchMoved method to recognize and process multitouch events?

Thanks.

Upvotes: 1

Views: 1549

Answers (1)

Tom Tu
Tom Tu

Reputation: 9583

You've used wrong CC2D method.

you should use

- (BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

rather then

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event

as you want to capture multiple touches whereby ccTouchMoved capturs only one

Upvotes: 3

Related Questions