【问题标题】:getKeyFrame method accepts a float that is continuously incrementing. Why?getKeyFrame 方法接受一个不断递增的浮点数。为什么?
【发布时间】:2015-12-10 13:55:03
【问题描述】:

我正在关注一本 libgdx 书籍。在其中,作者使用 Animation 类来播放动画。这是相关代码:

public class Flappee{

private float animationTimer = 0;

private static final float FRAME_DURATION=0.25f;

public Flappee(Texture texture){

    TextureRegion[][] flappeeTextures = new TextureRegion(texture).split(118,118);
    collisionCircle = new Circle(x,y,COLLISION_RADIUS);
    this.animation = new Animation(FRAME_DURATION,flappeeTextures[0][0],flappeeTextures[0][1]);
    animation.setPlayMode(Animation.PlayMode.LOOP);
}

public void update(float delta){
        animationTimer+=delta; //called in render method of ScreenAdapter class
}


public void draw(SpriteBatch batch){
        TextureRegion texture = animation.getKeyFrame(animationTimer);
        batch.draw(//drawing commands);
    }
}

我不明白为什么每次渲染循环都需要增加animationTimer。如您所见,getKeyFrame 返回正确的纹理区域至关重要。我想这与一直循环播放相同的动画有关。我可以要求对此主题进行更多解释吗?

【问题讨论】:

    标签: animation libgdx


    【解决方案1】:

    传递给 render 的 delta 值是自上一帧以来的时间量,因此每次调用 render 时将其添加到 animationTimer 意味着 animationTimer 保存自动画开始运行以来的时间量。

    这是确定在任何给定时间显示什么帧所必需的。因此,如果您希望动画以每秒 5 帧的速度运行,并且 animationTimer 为 400 毫秒,那么它可以计算出它应该显示第 2 帧。

    它不会在每次调用 render 时简单地选择下一帧,因为这会将动画速度与帧速率联系起来,这并不总是可取的。此外,帧速率不是恒定的,因此这种方法可确保消除任何不一致。

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 2020-03-31
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2021-08-05
      • 2014-02-25
      相关资源
      最近更新 更多