Q:如何用新米反向播放OneShot动画
Q: How to play OneShotAnimations in reverse with new rive
我有一个应用程序,其中有一个用 rive 制作的动画复选标记。这是一个一次性动画,我想播放它并让它在完成后留在动画的末尾,然后当用户再次单击它时也能够反转它。我尝试使用 SimpleAnimation 但我也无法实现我想要的,但它在动画完成后仍然存在。但是,我不知道如何播放动画然后反转它或播放另一个动画。
复选标记看起来像这样:https://cln.sh/MwLFNs
它们是两个独立的动画,但它们是反向复制粘贴的,所以我可以使用一个或两个。
我需要的是让动画播放,然后当用户点击支票时,我希望动画更改为另一个可以播放的动画。我怎样才能做到这一点?
感谢您的帮助!
您可以使用状态机,获取状态并在需要时决定做什么
// Getting state machine
void _onRiveInit(Artboard artboard) async {
final controller =
StateMachineController.fromArtboard(artboard, 'State Machine 1');
if (controller != null) {
artboard.addController(controller);
_lick = controller.findInput<bool>('Lick') as SMITrigger;
}
}
void _onHandlerStateMachine() => _lick?.value = !_lick!.value;
_onRiveInit 是在加载 Rive 文件时触发的函数,
在你得到 controller 到状态机后修改他的状态 (这很重要,状态机的名称必须与动画状态机名称相同)
并修改触发器的值,您必须以这种方式获得参考
_lick = controller.findInput('Lick') as SMITrigger;
那么你可以使用
void _onHandlerStateMachine() => _lick?.value = !_lick!.value;
随时打开或删除动画,也可以有多个触发器。
如果你需要你的动画做一些事情,过一段时间再做一些其他事情,你可以使用去抖功能
_debouncer.run(() {
_onHandlerStateMachine()
});
**如果使用状态管理,记得更新视图
加载 rive 文件时
// Loads a Rive file
Future<void> _loadRiveFile() async {
final bytes = await rootBundle.load(riveFileName);
RiveFile rFile = RiveFile.import(bytes);
final artboard = rFile.mainArtboard;
_onRiveInit(artboard);
globalArtboard = artboard
..addController(
_animationController = SimpleAnimation('idle'),
);
}
这里有泰迪熊的 Rive 动画示例,使用 Flutter 和提供程序
https://github.com/alcampospalacios/flutter-rive-animations
我有一个应用程序,其中有一个用 rive 制作的动画复选标记。这是一个一次性动画,我想播放它并让它在完成后留在动画的末尾,然后当用户再次单击它时也能够反转它。我尝试使用 SimpleAnimation 但我也无法实现我想要的,但它在动画完成后仍然存在。但是,我不知道如何播放动画然后反转它或播放另一个动画。
复选标记看起来像这样:https://cln.sh/MwLFNs
它们是两个独立的动画,但它们是反向复制粘贴的,所以我可以使用一个或两个。
我需要的是让动画播放,然后当用户点击支票时,我希望动画更改为另一个可以播放的动画。我怎样才能做到这一点?
感谢您的帮助!
您可以使用状态机,获取状态并在需要时决定做什么
// Getting state machine
void _onRiveInit(Artboard artboard) async {
final controller =
StateMachineController.fromArtboard(artboard, 'State Machine 1');
if (controller != null) {
artboard.addController(controller);
_lick = controller.findInput<bool>('Lick') as SMITrigger;
}
}
void _onHandlerStateMachine() => _lick?.value = !_lick!.value;
_onRiveInit 是在加载 Rive 文件时触发的函数, 在你得到 controller 到状态机后修改他的状态 (这很重要,状态机的名称必须与动画状态机名称相同) 并修改触发器的值,您必须以这种方式获得参考
_lick = controller.findInput('Lick') as SMITrigger;
那么你可以使用
void _onHandlerStateMachine() => _lick?.value = !_lick!.value;
随时打开或删除动画,也可以有多个触发器。 如果你需要你的动画做一些事情,过一段时间再做一些其他事情,你可以使用去抖功能
_debouncer.run(() {
_onHandlerStateMachine()
});
**如果使用状态管理,记得更新视图
加载 rive 文件时
// Loads a Rive file
Future<void> _loadRiveFile() async {
final bytes = await rootBundle.load(riveFileName);
RiveFile rFile = RiveFile.import(bytes);
final artboard = rFile.mainArtboard;
_onRiveInit(artboard);
globalArtboard = artboard
..addController(
_animationController = SimpleAnimation('idle'),
);
}
这里有泰迪熊的 Rive 动画示例,使用 Flutter 和提供程序 https://github.com/alcampospalacios/flutter-rive-animations