You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter/Flame中如何让精灵按独立方向逐块移动?

解决Flame中角色按顺序逐块移动的问题

你的问题核心在于移动函数没有等待当前移动完成就执行了下一个,导致多个MoveByEffect同时作用在角色上,位移向量叠加后形成斜线移动,而非串行的逐块移动。以下是具体解决方法:

修改移动函数,等待移动完成

原来的移动函数只是添加Effect就返回Future,没有真正等待移动结束。我们用Completer监听Effect完成事件,确保Future在移动结束后才完成:

// 向前移动一格,1秒完成,移动结束后Future才会resolve
Future moveForward(Character character) {
  final completer = Completer();
  final effect = MoveByEffect(
    Vector2(0, -90),
    EffectController(duration: 1),
    onComplete: () => completer.complete(),
  );
  character.add(effect);
  return completer.future;
}

// 向左移动一格,同理
Future moveLeft(Character character) {
  final completer = Completer();
  final effect = MoveByEffect(
    Vector2(-90, 0),
    EffectController(duration: 1),
    onComplete: () => completer.complete(),
  );
  character.add(effect);
  return completer.future;
}

串行执行移动序列

遍历你的方向列表,用await逐个执行移动函数,确保上一步移动完成后再开始下一步:

// 传入角色和移动指令列表,按顺序执行
Future runMoveSequence(Character character, List<Future Function(Character)> moveList) async {
  for (final move in moveList) {
    await move(character);
  }
}

调用示例:

// 先向前再向左的执行逻辑
runMoveSequence(character, [moveForward, moveLeft]);

补充说明

之前出现的"弧线"其实是两个位移向量叠加后的斜线移动——因为两个MoveByEffect同时修改角色位置,x和y方向的位移同时进行,最终走的是两点间的直线,而非先完成x方向再完成y方向的逐块路径。通过等待每个Effect完成,就能让角色严格按顺序走完每一段路径。

内容的提问来源于stack exchange,提问作者akzkgqzxelawaveeiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:47:05