Cocos2d - Изменение анимации после ее окончания - PullRequest
2 голосов
/ 18 июля 2010

У меня есть CCSprite с тремя анимациями: холостой ход, ходьба и атака.Я хочу переключаться между режимами ожидания и ходьбы в зависимости от того, движется ли спрайт (если используется джойстик).Все это прекрасно работает.Для атакующей анимации я хочу, чтобы она запускалась один раз, а затем возвращалась к предыдущей анимации после завершения (например, в режиме ожидания). Как определить, когда анимация выполнена?* Dave

1 Ответ

5 голосов
/ 19 июля 2010

Хорошо, вот что я сделал, и это работает, хотя я понятия не имею, правильно ли это или лучший способ: 1) сохранить текущую анимацию.2) Если текущая анимация атакует, ничего не делайте.3) при переключении между анимациями, если новая анимация атакует, запустите последовательность на спрайте, вторым действием будет обратный вызов «onDoneAttacking» 4) в обратном вызове, измените текущую анимацию

Но этоне очень гладко и не позволяет атаковать очень быстро.

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

 -(void) changeAnimation:(NSString*)name forTime:(int) times {

    if(currentAnimation != @"attack" )
    {
        CCFiniteTimeAction *action = [CCAnimate actionWithAnimation:[self animationByName:name]];
        CCRepeat *repeatAction = [CCRepeat actionWithAction:action times:1];
        if(name == @"attack") {
            id doneAttacking  = [CCCallFunc actionWithTarget:self selector:@selector(onDoneAttacking)];
            [self runAction:[CCSequence actionOne:repeatAction two:doneAttacking]];
        }
        else {
            [self runAction:repeatAction];
        }
        currentAnimation = name;
    }
}
-(void) onDoneAttacking {
    currentAnimation = @"idle";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...