1

我正在尝试从我的 riv 耀斑中显示动画。在 FlareActor 和 flr 文件中真的很简单。但无法用 riv 显示我的动画。我的 riv 文件中有 2 个动画。它们是 anim1 和 anim2。我试图将 anim1 显示为默认值。然后尝试根据条件更改它。这是我的代码片段。

  late RiveAnimationController? _controller;
  Artboard? _riveArtboard;

  @override
  void initState() {
    super.initState();
    _loadRiveFile();
  }

  void _loadRiveFile() async {
    await rootBundle.load('assets/animations/anim_file.riv').then(
          (data) async {
        final file = RiveFile.import(data);
        final _artboard = file.mainArtboard;
        _artboard.addController(_controller = SimpleAnimation('anim1'));
        setState(() => _riveArtboard = _artboard);
      },
    );
  }

这是构建函数:

GestureDetector(
  onTap: () => {getStatus},
  child: _riveArtboard == null ? const SizedBox.shrink(): Rive(artboard: _riveArtboard!))),

我错过了什么?或者我怎样才能显示我的动画?我也尝试了设置控制器,但没有奏效。

4

1 回答 1

0

Rive 提供StateMachineController动画之间的切换。如果你想使用SimpleAnimation,你可以按照这种方式。

  // on state class
  RuntimeArtboard _riveArtboard = RuntimeArtboard();
  final SimpleAnimation anim1 = SimpleAnimation('anim1');
  final SimpleAnimation anim2 = SimpleAnimation('anim2');

要在动画之间进行切换,您需要移除之前的控制器并添加您想要制作动画的控制器。

  playAnim2(){
   _riveArtboard.artboard..removeController(anim1)
   ..addController(anim2);
 }

您可以访问遵循此模式的此存储库。

我会鼓励你使用StateMachineController

在这种情况下,您在 rive 上实现动画时需要某种输入值。

在飞镖层面,

 /// on state class
  StateMachineController? controller;
  SMIInput<bool>? isAnim1; // true from rive
  Artboard? _riveArtboard;

您需要isAnim1.value= false根据您的场景提供的所有内容,它都会切换动画。

在 Stackoverflow和GitHub 存储库上检查这个问题

于 2022-01-03T12:49:00.213 回答