iPhone Cocos2D - палец, вращающий спрайт - PullRequest
1 голос
/ 12 ноября 2011

Я создал подкласс класса CCSprite и добавил к нему UIRotationGestureRecognizer. Итак, в моем методе инициализации у меня есть это

UIRotationGestureRecognizer *rot = [[[UIRotationGestureRecognizer alloc]
                         initWithTarget:self action:@selector(handleRotation:)] autorelease];
[rot setDelegate:self];
[[[CCDirector sharedDirector] openGLView] addGestureRecognizer:rot];

и тогда у меня есть метод

- (void)handleRotation:(UIRotationGestureRecognizer *)recognizer {

    float rotation = [recognizer rotation];
    self.rotation += rotation;
}

работает отлично, но имеет огромный разрыв между фактическим жестом и самим вращением. Я бы сказал, почти 0,5 секунды между жестом и ответом спрайта.

Как мне это решить? спасибо.


ПРИМЕЧАНИЕ. После первого комментария я добавил в спрайт еще два распознавателя: UIPinchGestureRecognizer и UIPanGestureRecognizer. Я также добавил метод делегата shouldRecognizeSim одновременноouslyWithGestureRecognizer и установил для него значение YES.

После этого и проверки жесты щипка и панорамирования быстры, как ад. С другой стороны, вращение продолжается медленно. Не было никакого снижения скорости вращения, добавив эти два других распознавателя жестов. Два других отвечают быстро и быстро, UIRotationGestureRecognizer работает медленно.

1 Ответ

4 голосов
/ 12 ноября 2011

Вращение жестов в радианах, а вращение Cocos2D в градусах. Поэтому вам нужно преобразовать это следующим образом:

- (void)handleRotation:(UIRotationGestureRecognizer *)recognizer 
{
    float rotation = CC_RADIANS_TO_DEGREES([recognizer rotation]);
    self.rotation += rotation;
}

Вы также можете избавить себя от этих проблем и использовать Kobold2D, который не только добавляет простой в использовании интерфейс для жестов (и другие типы ввода) в Cocos2D, но также преобразует значения в соответствии с координатами представления Cocos2D и градусов. Вам никогда не придется снова думать о преобразовании значений.

...