Cocos2d - 一个结束后更改动画

时间:2010-07-17 20:27:51

标签: cocos2d-iphone

我有一个带有三个动画的CCSprite:空闲,行走和攻击。我想在空闲和步行之间切换,具体取决于精灵是否在移动(如果操纵杆正在使用)。所有这一切都很棒。 对于攻击动画,我希望它运行一次,然后在完成后返回上一个动画(例如:空闲)如何检测动画何时完成?

感谢,

戴夫

1 个答案:

答案 0 :(得分:5)

好吧,所以这就是我所做的,并且它有效,但我不知道它是正确还是最好的方式: 1)存储当前动画。 2)如果currentAnimation正在攻击,则什么也不做。 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";
}
相关问题