getKeyFrame方法接受一个不断递增的浮点数。为什么呢?

时间:2015-12-10 13:55:03

标签: animation libgdx

我正在关注一本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返回正确的textureRegion至关重要。我想这与循环播放相同的动画有关。我可以就这个主题提出更多解释吗?

1 个答案:

答案 0 :(得分:2)

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

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

每次调用渲染时,它都不会简单地选择下一帧,因为这会将动画速度与帧速率联系起来,这并不总是令人满意的。 framrates也不是恒定的,因此这种方法可以确保平滑任何不一致。