javascript - pathFinding.js 库 - 只有第一个路径是正确的
问题描述
我正在使用PathFinding.js 包。我的代码是:
var grid = new PF.Grid(6, 6);
grid.setWalkableAt(0, 1, false);
grid.setWalkableAt(1, 1, false);
grid.setWalkableAt(2, 1, false);
grid.setWalkableAt(3, 1, false);
grid.setWalkableAt(4, 1, false);
grid.setWalkableAt(1, 2, false);
grid.setWalkableAt(0, 3, false);
grid.setWalkableAt(1, 3, false);
var finder = new PF.AStarFinder();
var path1 = finder.findPath(0, 0, 2, 2, grid);
var path2 = finder.findPath(0, 0, 0, 2, grid);
var path3 = finder.findPath(0, 0, 5, 0, grid);
console.log(path1.length)
console.log(path2.length)
console.log(path3.length)
这是上面的可视化:
(但 x 和 y 是其他方式,我在图像中的错误)
我正在检查所有 3 个绿点的路径长度,以检查哪个是最短的。不幸的是,只有第一条路径的长度正确。为什么?我没有使用正确的包吗?我从这个问题的第一行的链接中关注了文档。
我不认为这是一个包装问题,因为它被广泛使用并且在 GH 有超过 6k 颗星。
解决方案
我没有注意到文档中的这句话:
请注意,网格在每次寻路时都会被修改,之后将无法使用。如果您想多次使用单个网格,请在调用 findPath 之前为其创建一个克隆。
所以我必须创建网格克隆。稍后我将finder
在循环中使用,因此在其中我需要每次在循环中重新分配网格克隆:
gridBackup = grid.clone();
推荐阅读
- git - 是否可以删除一个分支中存在的 commis,而另一个分支中不存在这些 commis?
- jquery - 禁用 Wordpress 搜索按钮未输入任何内容
- reactjs - 推送到 azure dev ops (git) 中的分支
- installation - 如何在两台机器上匹配 Cygwin 安装?
- c# - 如何使用异步方法
- c - 将二进制数据写入 C 中的 void* 缓冲区时出现问题
- python - aio-pika RPC 模式示例崩溃:RobustConnection:连接关闭
- scala - 如何在 Scala 中从运行时值创建部分函数
- flutter - 在第一次构建时无法加载资产,但它们在热重启 Flutter 时加载
- python - 对一个值进行简单的python字典切割