Animation Libgdx动画控制器,针对剔除动画进行优化

Animation Libgdx动画控制器,针对剔除动画进行优化,animation,3d,libgdx,Animation,3d,Libgdx,我不想剔除用户看不到的所有动画。我尝试了一种简单的方法,如果动画对象不可见,我就不调用AnimationController.update()。这不起作用,因为我不想。因为当剔除的对象返回视图时,它将播放最后应用的动画(即使是我在剔除的位置应用的动画),我猜这是意料之中的。动画仍然需要应用于消隐对象,因为它们可能在动画的中途进入视图 我现在正在研究AnimationController的子类化,并将update()方法更改为考虑对象是否被剔除。如果是的话,我不想只更新“时间”,而不做任何“繁重”

我不想剔除用户看不到的所有动画。我尝试了一种简单的方法,如果动画对象不可见,我就不调用AnimationController.update()。这不起作用,因为我不想。因为当剔除的对象返回视图时,它将播放最后应用的动画(即使是我在剔除的位置应用的动画),我猜这是意料之中的。动画仍然需要应用于消隐对象,因为它们可能在动画的中途进入视图

我现在正在研究AnimationController的子类化,并将update()方法更改为考虑对象是否被剔除。如果是的话,我不想只更新“时间”,而不做任何“繁重”的操作

我的问题是,我不确定哪些是重部件,哪些是我需要更新/升级的最低限度。所以我希望对AnimationController类有更多了解的人能帮我一点忙?欢迎任何帮助,谢谢

/** Update any animations currently being played.
 * @param delta The time elapsed since last update, change this to alter the overall speed (can be negative). */
public void update (float delta) {
    if (paused) return;
    if (previous != null && ((transitionCurrentTime += delta) >= transitionTargetTime)) {
        removeAnimation(previous.animation);
        justChangedAnimation = true;
        animationPool.free(previous);
        previous = null;
    }
    if (justChangedAnimation) {
        target.calculateTransforms();
        justChangedAnimation = false;
    }
    if (current == null || current.loopCount == 0 || current.animation == null) return;
    justChangedAnimation = false;
    updating = true;
    final float remain = current.update(delta);
    if (remain != 0f && queued != null) {
        inAction = false;
        animate(queued, queuedTransitionTime);
        queued = null;
        updating = false;
        update(remain);
        return;
    }
    if (previous != null)
        applyAnimations(previous.animation, previous.offset + previous.time, current.animation, current.offset + current.time,
            transitionCurrentTime / transitionTargetTime);
    else
        applyAnimation(current.animation, current.offset + current.time);
    updating = false;
}

我希望我能做一些事情,比如只提前过渡当前时间、保留时间和当前时间。当被剔除时…?

我没有阅读全部代码,我对那些
动画
没有任何经验。但通常,增加
delta
就足够了。因此,您需要一个变量,它记录自上次更新以来经过的时间(我们称之为
updTime
)。您可以将
updTime
每帧增加
delta
。如果
动画
在视图中,请调用
更新(updTime)
并设置
updTime=0f
。我查看了它,但看不出它是如何工作的。也就是说,一个动画角色在你身后被剔除,它会执行多种技能,触发多种动画。一段时间后,比如说10秒,该角色进入视图,并且(实际上)其当前动画还有2秒。然后我将10秒的累积增量发送到动画控制器,我只是看不到它在工作。也许再加上每次我应用新动画时重置updTime就可以了。我会试试看,谢谢你的评论!
updTime
始终取决于当前的
动画。如果
动画
更改,则必须将其重置,因为新的
动画
从0开始。