libGDX在最后一帧停止动画

时间:2017-04-29 09:55:03

标签: java android animation libgdx 2d

我有扩展Actor的课程。我的动画是使用stateTime计时器的'act'方法。下面是这个类的片段:

@Override
public void act(float delta) {
    super.act(delta);
    stateTime += delta;

    if(!isDeath) {

       ...

    } else {
        if(!animationDead.isAnimationFinished(stateTime)){
            textureRegion = animationDead.getKeyFrame(stateTime, true);
        }

    }
}

animationDead有PLAYMODE.NORMAL

我正在尝试使用'!animationDead.isAnimationFinished(stateTime)',但它在第一帧后停止了我的动画。我想在最后一帧之后停止动画。

我也试图设置stateTime = 0;但同样的,在第一帧之后停止。

当我按下例如SPACE键我的'演员'应该玩战斗动画时,我有同样的情况。但是对于战斗动画的所有帧我必须持有空间键。一个抽头空间是一帧动画。

以下是此方法的片段:

@Override
public void act(float delta) {
    super.act(delta);
    stateTime += delta;

    if(!isAttacking()) {
    ...

    /* Keyboard events */
    ...
    setAttacking(false);

    if (Gdx.input.isKeyPressed(Input.Keys.SPACE)) {
        setAttacking(true);
        if (moveToRight) {
            textureRegion = animationAttack.getKeyFrame(stateTime,true);
        } else if (!moveToRight) {
            isPlayerFlippedToLeft = true;
            textureRegion = animationAttack.getKeyFrame(stateTime,true);
        }
        setPlayerWidthAndHeight();
    }

1 个答案:

答案 0 :(得分:2)

当您在动画上调用animationDead.getKeyFrame(stateTime, true);方法时,Animation's模式会转换为PlayMode.LOOPPlayMode.LOOP_REVERSED,具体取决于当前的动画模式。

PlayMode.NORMAL - > PlayMode.LOOP

PlayMode.REVERSED - > PlayMode.LOOP_REVERSED

isAnimationFinished(stateTime)如果在没有循环播放的情况下完成动画

,则返回true。

为什么不拨打animationAttack.getKeyFrame(stateTime);

修改

好的,现在你正在使用animationAttack.getKeyFrame(stateTime);

对于三个不同的stateTime,您正在使用相同的Animation,当时间显示animationDeadstateTime交叉动画frameduration的动画时,时间isAnimationFinished(stateTime)返回true,所以

if(!animationDead.isAnimationFinished(stateTime)){  //condition false
   textureRegion = animationDead.getKeyFrame(stateTime); 
}

最后textureRegion没有死TextureRegion帧。