闪光/颤动:如何在开始动画之前重置动画的进度?

时间:2019-12-11 17:00:35

标签: flutter flare

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

用例是这样的:

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

所需结果:新动画会重置形状的不透明度,然后开始播放并像正常播放

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

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

在以上主题中,Luigi Rosso提到了“重新实例化”画板。有谁知道他的意思是什么以及怎么做?我尝试了几种方法来执行此操作,例如在makeInstanceFlutterActorArtboard等类中找到的ActorNode方法(还有makeInstance方法的一些变体但是它们的名称都相同,并且返回一个新的画板。但是,到目前为止,我并没有在FlareController实现中替换画板的当前实例。

我还尝试过手动遍历画板的所有ActorNode,并先保存其初始值,然后每次播放新动画时将保存的值复制到画板上,但这似乎严重破坏了内容(无法识别动画,之后动画无法正常播放,因此我一定做错了。或者我正在重置错误的值)。

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

要在形状上播放其他动画并重置其不透明度,可以使用以下命令在运行时访问节点的不透明度:

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

As outlined here

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

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