【问题标题】:libGDX stop animation at last framelibGDX 在最后一帧停止动画
【发布时间】:2017-04-29 09:55:02
【问题描述】:

我有扩展 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;但同样,在第一帧后停止。

当我按下空格键时,我的“演员”应该播放战斗动画。但是对于战斗动画的所有帧,我必须保持空格键。一个点击空间是一帧动画。

这里是这个方法的片段:

@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();
    }

【问题讨论】:

    标签: java android animation libgdx 2d


    【解决方案1】:

    当您在 Animation 上调用 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);

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

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

    终于纹理区域没有死 TextureRegion 帧。

    【讨论】:

    • 当我打电话给animationAttack.getKeyFrame(stateTime); 时,我只看到第一个或最后一个(我不确定)但只有一帧动画和动画停止@Abhishek Aryan
    • 因为如果你的动画模式是PlayMode.NORMAL,它会运行一次。让你的动画变慢,这样你就可以看到所有的帧
    • 放慢动画并不能解决问题@Abhishek Aryan
    • 这里是完整代码github.com/twistezo/ninja-vs-zombie/blob/master/core/src/com/… 我认为问题出在这种行为方法的框架中
    • isAnimationFinished(stateTime)return 如果动画将在不循环播放的情况下完成,则返回 true。
    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多