项目空间

项目笔记N-210

寻路

更新
内容块
28
阅读
约 1 分钟
路径
项目笔记 / CS / 2026.7.7 / AI 模组

导航图和寻路原理

节点图

地图用 NavNode 表示可走点,节点之间通过 links 相连。Bot 不会凭空知道地图,它只知道:

  • •我现在在哪个可达节点附近。
  • •目标在哪个节点附近。
  • •从当前节点到目标节点有哪些边。

`nearestReachableNode()`

普通“最近节点”可能跨墙。例如墙另一边的点离你更近,但实际走不过去。

所以项目用了:

代码块C++
nearestReachableNode(p)

它只选择当前位置能通过 navEdgePassable() 直达的节点。找不到才退回普通最近节点。

`findPath()`

findPath() 用 BFS 找路径:

  1. 1.从起点入队。
  1. 2.访问所有邻接节点。
  1. 3.跳过无效节点、被临时标记阻塞的节点、不可通行边。
  1. 4.记录 prev。
  1. 5.从目标倒推路径。
  1. 6.调用 smoothPathFrom() 平滑。

因为地图规模小,BFS 足够用,不需要 A*。

`steerToTarget()`

路径告诉 Bot “往哪个节点走”,steerToTarget() 负责实际移动:

  • •朝目标方向移动。
  • •加入队友分离力,避免挤成一团。
  • •对下包/拆包/带包者降低分离力,避免关键目标被队友挤偏。
  • •探测前方墙体。
  • •如果撞墙,尝试侧移。
  • •如果仍然失败,清路线并触发重寻路。