项目笔记N-210
寻路
- 更新
- 内容块
- 28
- 阅读
- 约 1 分钟
- 路径
- 项目笔记 / CS / 2026.7.7 / AI 模组
导航图和寻路原理
节点图
地图用 NavNode 表示可走点,节点之间通过 links 相连。Bot 不会凭空知道地图,它只知道:
- •我现在在哪个可达节点附近。
- •目标在哪个节点附近。
- •从当前节点到目标节点有哪些边。
`nearestReachableNode()`
普通“最近节点”可能跨墙。例如墙另一边的点离你更近,但实际走不过去。
所以项目用了:
nearestReachableNode(p)它只选择当前位置能通过 navEdgePassable() 直达的节点。找不到才退回普通最近节点。
`findPath()`
findPath() 用 BFS 找路径:
- 1.从起点入队。
- 2.访问所有邻接节点。
- 3.跳过无效节点、被临时标记阻塞的节点、不可通行边。
- 4.记录
prev。
- 5.从目标倒推路径。
- 6.调用
smoothPathFrom()平滑。
因为地图规模小,BFS 足够用,不需要 A*。
`steerToTarget()`
路径告诉 Bot “往哪个节点走”,steerToTarget() 负责实际移动:
- •朝目标方向移动。
- •加入队友分离力,避免挤成一团。
- •对下包/拆包/带包者降低分离力,避免关键目标被队友挤偏。
- •探测前方墙体。
- •如果撞墙,尝试侧移。
- •如果仍然失败,清路线并触发重寻路。