我有一个Flare文件,其中包含3个动画,全部位于同一画板上。我知道在动画之间切换时,Flare会默认将动画混合在一起,并且播放一个动画不会将相关节点的值重置为编辑器中第0帧的值。这就是我想要实现的行为:在播放新动画时,我希望以前的动画完全停止(完全不混合),并且让传入的动画从头开始其默认值。
用例是这样的:
所需结果:新动画会重置形状的不透明度,然后开始播放并像正常播放
实际结果:由于先前的动画更改了形状的不透明度,因此新动画将使用形状而不是在编辑器中创建形状
对于我在GitHub上解释的问题,您可以查看此问题的线程结尾(有gif图像):https://github.com/2d-inc/Flare-Flutter/issues/14
在以上主题中,Luigi Rosso提到了“重新实例化”画板。有谁知道他的意思是什么以及怎么做?我尝试了几种方法来执行此操作,例如在makeInstance
,FlutterActorArtboard
等类中找到的ActorNode
方法(还有makeInstance
方法的一些变体但是它们的名称都相同,并且返回一个新的画板。但是,到目前为止,我并没有在FlareController实现中替换画板的当前实例。
我还尝试过手动遍历画板的所有ActorNode
,并先保存其初始值,然后每次播放新动画时将保存的值复制到画板上,但这似乎严重破坏了内容(无法识别动画,之后动画无法正常播放,因此我一定做错了。或者我正在重置错误的值)。
感谢您的帮助,谢谢!
答案 0 :(得分:0)
要在形状上播放其他动画并重置其不透明度,可以使用以下命令在运行时访问节点的不透明度:
ActorNode myNode = _artboard.getNode("nodeString");
myNode.opacity = 0.00;
更简单地说,在新动画中,您可以在Rive / Flare编辑器中将新动画开始时的不透明度设置为1,这样,当从头开始播放动画时,其不透明度将为重置为1。
要播放一个动画,然后在下一个动画播放时将其完全覆盖,则可以扩展FlareController
并创建一个自定义动画控制器,以使用advance
方法执行此操作。
这是一个快速且肮脏的示例(不是最佳实践),可让您使用advance
:
https://gist.github.com/she-who-codes/85d8f0da97abfc3ecc43b1cb470e9c29
https://gist.github.com/she-who-codes/ce633204cd2d4babfe9a5b54e34ca63d