animation - 如何为 Sprite 设置动画以移动到 flutter 的任意点?

我正在尝试学习在 Flutter 中使用带有 Stack 和 PositionedTransitions 的动画,为此我正在制作一个基于 Sprite 的简单游戏。目前我的 Sprite 出现在他们动画的结束位置,而不是在开始然后滑动到结束位置。
我的代码如下所示:

if (lamb != null) {
  beginTop = ((lamb.lastY - 1) * roomLength) + lamb.lastY;
  beginLeft = ((lamb.lastX - 1) * roomLength) + lamb.lastX;
  endTop = ((lamb.y - 1) * roomLength) + lamb.y;
  endLeft = ((lamb.x - 1) * roomLength) + lamb.x;
  layerAnimation = RelativeRectTween(
    begin: RelativeRect.fromLTRB(beginLeft, beginTop, 0.0, 0.0),
    end: RelativeRect.fromLTRB(endLeft, endTop, 0.0, 0.0),
  ).animate(_controller.view);
  return PositionedTransition(
    rect: layerAnimation,
    child: Text(
      lamb.emoji,
      style: TextStyle(color: Colors.black, fontSize: roomLength - 12),
    ),
  );
}

我应该在某处包含对 _controller.forward() 的调用吗?何时何地?屏幕上最多同时有 10 个动画小部件,它们都使用同一个 _controller,它们必须同时滑动。

谢谢

PS:下面的代码,而不是 PositionedTransition 的东西,似乎朝着正确的方向发展:

 return AnimatedPositioned(
        left: endLeft,
        top: endTop,
        duration: Duration(milliseconds: 900),
        child: Text(
          widget.maze.minotaur.emoji,
          style: TextStyle(color: Colors.black, fontSize: roomLength),
        ),
      );

但是我不知道如何指定动画的起点 - 它似乎在正确的位置结束,有时从正确的位置开始,但我如何强制它从正确的位置开始?我想是“补间”,但如果是这样,我不确定如何将其连接起来。 或者通过添加这样的键,到目前为止似乎有所帮助:

return AnimatedPositioned(
    key: Key('uniquekey'),
    left: endLeft,
    top: endTop,
    curve: Curves.linear,
    duration: Duration(milliseconds: 900),
    child: Text(
      widget.maze.minotaur.emoji,
      style: TextStyle(color: Colors.black, fontSize: roomLength),
    ),
  );
}

最佳答案

像这样添加一个键,似乎是 API 问题的答案,该键告诉 flutter 哪个 AnimatedPositioned 小部件在更新之间是哪个,因此它可以知道每个小部件从哪里开始它的旅程,没有它,每个更新都是新的,并且旧的没有了,所以没有开始使用的位置:

return AnimatedPositioned(
    key: Key('uniquekey'),
    left: endLeft,
    top: endTop,
    curve: Curves.linear,
    duration: Duration(milliseconds: 900),
    child: Text(
      widget.maze.minotaur.emoji,
      style: TextStyle(color: Colors.black, fontSize: roomLength),
    ),
  );
}

https://stackoverflow.com/questions/57224096/

相关文章:

opencv - Flutter 实时人脸检测

text - 如何消除 flutter 上文本上方和下方的间隙

android - 如何使用 Flutter 构建能够拖动到全屏的底部表单小部件?

android - Flutter NetworkImage 处理 403 错误

dart - 如何在 Flutter 中将 RefreshIndicator 与 FutureBui

flutter - 附加到多个 ScrollView 的 ScrollController

flutter - 如何使用flutter firebase_ml_vision插件实时读取字符或条

firebase - 如何使用 flutter 删除 Firebase 存储文件?

firebase - Flutter Firebase BLoC 模式

dart - 根据条件添加小部件