Хорошо, вот что я сделал, и это работает, хотя я понятия не имею, правильно ли это или лучший способ: 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";
}