LibGDX动画中的StateTime

4

我该怎么在LibGDX中使用已实现的动画?我知道文档可以在这里找到,但当我想从动画中获取某个帧时,我需要使用stateTime,而文档中没有任何关于它的解释。因此问题是,在LibGDX的动画中,stateTime是什么意思?

2个回答

3

对于 getKeyFrame方法文档,它返回基于所谓状态时间的TextureRegion。状态时间是指物体在此动画实例表示的状态下花费的秒数,例如奔跑,跳跃等等。

但是,Animation.java源码是可读的。看起来它简化为 getKeyFrameIndex,它将状态时间除以frameDuration(构造函数的一个参数,表示每个帧的持续时间)来计算数组索引。对于循环或非循环序列,getKeyFrameIndex会执行不同的操作,但基本上它会采用数组索引从序列中查找正确的关键帧来显示。

因此,“stateTime”是从您的动画中选择关键帧的输入。文档假定您有一个“running”和另一个“jumping”的Animation实例(这些是其所提到的“状态”)。要在Animation中找到正确的关键帧,您告诉它您已经处于此“状态”多长时间。因此,如果您已经在“running” Animation实例中停留了1.2秒,它会执行一些数学计算以确定要显示哪个关键帧(假设您已使用30帧初始化实例,每帧持续0.0333秒并循环——它选择第6帧)。

维基https://github.com/libgdx/libgdx/wiki/2D-Animation上有更多细节和示例,但也没有直接涉及这个问题。


0
animationFrames = walkSheetArray[moveDirection];
animation = new Animation(1f / 5f, animationFrames);
myAnimatedActor = new AnimatedActor(animation);
stage.addActor(myAnimatedActor);

public class AnimatedActor extends Image {
    private float stateTime = 0;
    Animation animation;
    public AnimatedActor(Animation animation) {
        super(animation.getKeyFrame(0));
        this.animation = animation;
    }

    @Override
    public void act(float delta) {
        ((TextureRegionDrawable) getDrawable()).setRegion(animation.getKeyFrame(stateTime += delta, true));
        super.act(delta);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接