2012-02-21 3 views
0

У меня есть простое CCRotateBy действие в последовательности; за ним следует призыв к другому методу, который подтверждает, что CCRotateBy завершено (в противном случае, что CCCallFunc не дозвонилась в последовательности, если CCRotateBy не полный):CCRotateBy не заполняется

-(void)correctRotation{ 
    if (self.rotationAmount){ 
    CCLOG(@"correcting rotation inside: %i",self.buildNum); 
    CCRotateBy*second=[CCRotateBy actionWithDuration:1 angle:-self.rotationAmount]; 
    CCEaseBackInOut*bounce2=[CCEaseBackInOut actionWithAction:second]; 
    CCCallFunc*func=[CCCallFunc actionWithTarget:self selector:@selector(stabilize)]; 
    CCSequence*seq=[CCSequence actions:bounce2,func, nil]; 
    [self runAction:seq]; 
    } 
} 

-(void)stabilize{ 
     CCLOG(@"stabilize before rotation: %i for %i",self.rotationAmount,self.buildNum); 
    self.rotationAmount=0; 
     CCLOG(@"stabilize after rotation: %i for %i",self.rotationAmount,self.buildNum);  
} 

The CCLog заявление подтверждает, что вращение должно происходить, а угол поворота не равен нулю (это всегда целое число). Эти журналы также показывают, что завершается CCSequence. Однако спрайт не вращается на экране. Я часами пробовал этот код, пытаясь понять, что может пойти не так. Если действия спрайта были остановлены, то эти 3 оператора журнала не будут завершены, не так ли?

+0

странно ... хммм, имели аналогичный один в прошлом с другим интервалом действия (Cocos версия 99,4 в то время). Вы пытались «встряхнуть» систему и попытаться использовать CCRotateTo self.rotation + self.rotationAmount? что исправил его для меня ... – YvesLeBorg

+0

Я не знал, что на CCSprite было свойство вращения; это не в ссылке на класс. Предполагается, что это степени вращения спрайта? – johnbakers

+1

CCSprite, как и большинство (все?) Объектов в cocos, происходит от CCNode, который имеет свойство вращения. Я только что сделал быстрый тест, он можно установить. Также (это может показаться глупым), вы подтвердили, что self.isRunning верно? – YvesLeBorg

ответ

1

Как говорит @tassinari, попробуйте удалить функцию отскока.

Это из ссылки cocos2d апи

http://www.cocos2d-iphone.org/api-ref/1.1.0/interface_c_c_ease_back_in_out.html

Warning: 
This action doesn't use a bijective function. Actions like Sequence might have an 
unexpected result when used with this action. 
+0

полезно, спасибо, но не причина проблемы. я вытащил действие простоты, используя только прямое действие поворота, но проблема остается и идентична – johnbakers

+0

, когда вы вызываете правильную функцию вращения? Я просто тестирую аналогичный код в своем проекте и прекрасно работаю, поэтому, возможно, проблема заключается в том, что вы вызываете эту функцию. Вы уверены, что rotationAmount> 0? Попробуйте с фиксированным номером, чтобы быть уверенным. – Setrio

0

Быстрый просмотр, но вы не вызываете CCRotateBy в своей последовательности. «Второе» действие не входит в последовательность.

+0

Извините, просто увидел его в своем действии отскока, возможно, удалите легкость в/из во время отладки. – tassinari