1

我有一个 Flare 文件,其中包含 3 个动画,都在同一个画板上。我知道在动画之间切换时,Flare 默认情况下会将动画混合在一起,并且播放一个动画不会将相关节点值重置回它们在编辑器中的第 0 帧上的值。这就是我想要实现的行为:在播放新动画时,我希望之前的动画完全停止(根本不要混合它们),并且让传入的动画从一开始就以其所有默认值开始.

用例是这样的:

  1. 播放动画,例如,形状的不透明度降至零
  2. 播放使用上方形状的不同动画,但在 Flare 编辑器中,它的不透明度在动画开始时为 1

期望的结果:新动画重置形状的不透明度,然后开始正常播放

实际结果:由于之前的动画改变了形状的不透明度,新的动画将使用原来的形状而不是在编辑器中创建的形状

对于我在 GitHub 上解释的问题,您可以查看有关此问题的线程的结尾(有 gif):https ://github.com/2d-inc/Flare-Flutter/issues/14

在上面的帖子中,Luigi Rosso 提到了“重新实例化”画板。有谁知道他的意思以及如何做到这一点?我已经尝试了几种方法来做到这一点,例如makeInstance在类中找到的方法FlutterActorArtboardActorNode以及其他一些方法(该方法有一些变体,makeInstance但它们都具有相似的名称并返回一个新的画板。但是,我没有运气更换到目前为止,我的画板在 FlareController 实现中的当前实例。

我还尝试手动遍历ActorNode画板的所有 s 并首先保存它们的初始值,然后每次播放新动画时将保存的值复制到画板,但这似乎非常糟糕(动画是无法识别并且在那之后没有正确播放,所以我一定做错了什么。或者我正在重置错误的值)。

任何帮助表示赞赏,谢谢!

4

1 回答 1

1

要在形状上播放不同的动画并重置其不透明度,您可以在运行时访问节点的不透明度:

ActorNode myNode = _artboard.getNode("nodeString");
myNode.opacity = 0.00;

手册中所述。

更简单地说,在新动画中,您可以在 Rive/Flare 编辑器中将关键帧设置为新动画开始时的不透明度为 1,这样当它从头开始播放动画时,其不透明度将重置为 1 .

对于播放一个动画,然后在播放下一个动画时完全覆盖它,您可以扩展FlareController并创建一个自定义动画控制器来在advance方法中执行此操作。这是一个快速而肮脏的示例(不是最佳实践),可以让您了解使用方法advancehttps ://gist.github.com/she-who-codes/85d8f0da97abfc3ecc43b1cb470e9c29 https://gist.github.com/she-who-代码/ce633204cd2d4babfe9a5b54e34ca63d

于 2019-12-16T19:55:42.430 回答