Animation Libgdx动画控制器,针对剔除动画进行优化
我不想剔除用户看不到的所有动画。我尝试了一种简单的方法,如果动画对象不可见,我就不调用AnimationController.update()。这不起作用,因为我不想。因为当剔除的对象返回视图时,它将播放最后应用的动画(即使是我在剔除的位置应用的动画),我猜这是意料之中的。动画仍然需要应用于消隐对象,因为它们可能在动画的中途进入视图 我现在正在研究AnimationController的子类化,并将update()方法更改为考虑对象是否被剔除。如果是的话,我不想只更新“时间”,而不做任何“繁重”的操作 我的问题是,我不确定哪些是重部件,哪些是我需要更新/升级的最低限度。所以我希望对AnimationController类有更多了解的人能帮我一点忙?欢迎任何帮助,谢谢Animation Libgdx动画控制器,针对剔除动画进行优化,animation,3d,libgdx,Animation,3d,Libgdx,我不想剔除用户看不到的所有动画。我尝试了一种简单的方法,如果动画对象不可见,我就不调用AnimationController.update()。这不起作用,因为我不想。因为当剔除的对象返回视图时,它将播放最后应用的动画(即使是我在剔除的位置应用的动画),我猜这是意料之中的。动画仍然需要应用于消隐对象,因为它们可能在动画的中途进入视图 我现在正在研究AnimationController的子类化,并将update()方法更改为考虑对象是否被剔除。如果是的话,我不想只更新“时间”,而不做任何“繁重”
/** 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开始。