如何在LibGDX中同时运行多个动画

时间:2014-08-25 21:13:11

标签: animation libgdx blender

我创建了一个Blender模型,该模型使用具有骨骼约束的骨架来为模型设置动画。将模型导出为.fbx文件并将其传递给fbx-conv后,我的动画会分成几个动画。

每个动画的最终ID都与"MyObject|MyAnimation"类似。

换句话说,我需要立即运行所有这些子动画来运行我的完整动画。

我尝试了几种AnimationController方法。首先,我尝试为每个动画调用AnimationController.setAnimation(),这不起作用,因为它在每次调用时取消当前动画。

AnimationController.animate()方法听起来应该做我想要的,但我得到与.setAnimation()相同的结果。

这是我尝试过的代码:

instance = new ModelInstance( myModel );
controller = new AnimationController( instance );

for( Animation animation : instance.animations ) {
    controller.animate( animation.id, 0 );
}

这不是.animate()的意图吗?

另外,我并不完全确定如何正确使用第二个参数transitionTime。这可能是问题吗?

1 个答案:

答案 0 :(得分:1)

正如Xoppa指出的那样,LibGDX docs on 3D Animations and Skinning表示如下:

  

"如果要将多个动画应用于同一个ModelInstance,您可以使用多个AnimationControllers,只要它们不会相互干扰(不会影响相同的节点)。 "


示例:

ModelInstance myInstance = new ModelInstance( myModel );

AnimationController controllerOne = new AnimationController( myInstance );
AnimationController controllerTwo = new AnimationController( myInstance );

controllerOne.setAnimation( "FirstAnimationId", -1 );
controllerTwo.setAnimation( "SecondAnimationId", -1 );

然后在渲染循环中,您还需要在所有.update(delta)上致电AnimationController

controllerOne.update( Gdx.graphics.getDeltaTime() );
controllerTwo.update( Gdx.graphics.getDeltaTime() );