2011-02-03 6 views
1

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

Это выглядит следующим образом:

- (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 *).

- (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 симулятор, я получил следующее сообщение об ошибке: «- [UITouch число]: непризнанные селектор направлен например 0x542d6a0' ».

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

Спасибо.

+0

привет pacman, могли бы вы рассказать мне, как вы реализовали angleBetweenLinesInRadians ? Благодарю. –

ответ

3

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

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

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

, а затем

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

, как вы хотите, чтобы захватить несколько прикосновений посредством ccTouchMoved capturs только один

+0

Привет, Том, извините за повторный вопрос из вышеприведенного комментария. Не могли бы вы дать мне представление о том, как был применен алгоритм angleBetweenLinesInRadians (алгоритм) над кодом pacman? Он принимает четыре аргумента CGPoint. Спасибо –

+0

Проверьте это для возможного решения. Http://bit.ly/14154Ej –

+0

Извините за то, что вы не знаете, можете получить угол между двумя точками с помощью atan2, я просто хотел узнать об этих 4 параметрах, почему предыдущее место в поле зрения аргументы были использованы для расчета? Я получаю текущий угол с текущими местоположениями, так что вычисляется еще что-то другое? –