Как реализовать вращение мультитач Cocos2d? - PullRequest
1 голос
/ 03 февраля 2011

Я уже реализовал мультисенсорное вращение изображения, используя стандартную графическую библиотеку iOS (Core Graphics).

Это выглядит так:

- (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);

    }
}

Теперь я пытаюсь реализовать это решение в моем проекте Cocos2d.Сначала я зарегистрировал CCTouchDispacher в своем методе init.

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

В своей функции ccTouchMoved я изменил (UITouch *) на (NSSet *) и собрал проект, чтобы быть уверенным, что все было правильно.В результате я получил следующее предупреждение: «Несовместимые типы Objective-C, инициализирующие« struct NSSet * », ожидаемые« struct UITouch * »».

Поскольку все по-прежнему работало правильно, я перешел и попытался извлечьобъекты первого и второго касания из (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];
    }

}

Теперь я попытался скомпилировать его, что сработало, но после запуска ccTouchMoved с помощью симулятора iPhone я получил следующее сообщение об ошибке: "- [UITouchcount]: нераспознанный селектор отправлен в экземпляр 0x542d6a0 '".

Может кто-нибудь объяснить, как заставить этот метод Cocos2d ccTouchMoved распознавать и обрабатывать события мультитач?

Спасибо.

1 Ответ

3 голосов
/ 03 февраля 2011

Вы использовали неправильный метод CC2D.

Вы должны использовать

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

вместо

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

, так как вы хотите захватить несколько касаний, в результате чего ccTouchMoved захватываеттолько один

...