)
对于该节点每一个不在关闭列表中的相邻节点:
将该节点设置为当前相邻节点的父节点(主要用于后面的节点回溯)
计算当前相邻节点的 G 值(从开始点到当前相邻点的距离)并将其加入到开放列表中...(译注:原文的意思应该是分段寻路,方法是如果在设置的循环限制内不能完成寻路的话,下一帧就从最后一个搜索节点开始重新寻路,这种方法并不一定能正确得到寻路结果,译文调整为分帧寻路)
节点中保存 is_open...我们将当前节点的分值设置为最低,并且将其 on_close 变量设置为 true,正常来说,我们应该将节点放置于关闭列表中,但是设置节点变量数据是效率更高的一种方式.OK,现在是时候扩展相邻节点了,扩展之前我们需要检查相邻节点是否已经处于关闭列表中...循环中我们创建了一个指向当前评估节点的指针 temp,然后我们检查他的 on_close 和 on_open 变量以获知其是否在关闭列表中或是在开放列表中.使用这种方法我们就避免了在传统 A* 算法中最大的一个性能问题...:
我们可以首先保存当前节点,然后一直回溯节点的父节点直到父节点为空.至此,我们仅通过节点数组便完成了所有的寻路操作(而没有使用节点列表)!