3D 动画

我们知道 3D 精灵对游戏很重要,也学会了如何操纵,但是可能还希望能有一些更丰富的效果。

那就添加动画吧!

要运行 3D 动画,你需要使用 Animation3DAnimate3D 对象,首先用 Animation3D 加载一个动画文件,然后使用 Animate3D 完成添加。

示例:

  1. // the animation is contained in the .c3b file
  2. auto animation = Animation3D::create("orc.c3b");
  3. // creates the Action with Animation object
  4. auto animate = Animate3D::create(animation);
  5. // runs the animation
  6. sprite->runAction(RepeatForever::create(animate));

去运行本文档的代码示例看看效果,记住,3D 动画与 2D 动画基本相同。2D 动画可参考本文档的 第四章

多动画

当想同时运行多个动画时,该怎么办?你可以创建多个动画,并指定开始时间和动画长度参数,两个参数的单位都是秒。例如:

  1. auto animation = Animation3D::create(fileName);
  2. auto runAnimate = Animate3D::create(animation, 0, 2);
  3. sprite->runAction(runAnimate);
  4. auto attackAnimate = Animate3D::create(animation, 3, 5);
  5. sprite->runAction(attackAnimate);

在上面的例子中,有两个动画可以运行,第一个从动画启动时开始然后持续 2 秒,第二个在 3 秒时开始然后持续 5 秒。

动画速度

动画速度由一个整数控制,整数的绝对值代表动画的持续时间,整数大于零动画正序播放,整数小于零倒序播放。速度设置为 10 意味着动画在 10 秒内正序播放完。

动画混合

使用多个动画时,会在每个动画之间自动应用混合,混合的目的是为了创造平滑的过渡。给定两个动画 A 和 B, 动画 A 最后一小段时间的几帧会和动画 B 前一小段时间的几帧重叠,这使得动画的变化看起来很自然。默认的混合的时间是 0.1 秒,你可以使用 Animate3D::setTransitionTime 更改默认的混合时间。

Cocos2d-x 支持关键帧之间的线性插值,这能填补曲线上的空白,确保光滑的路径。如果在模型构建时指定了其它插值方法,我们内置的工具 fbx-conv 将生成额外的关键帧,这种补偿通常根据目标框架完成。 有关 fbx-conv 的更多信息,请参考本章末尾的讨论