对于小型 2D 游戏中的寻路,我使用 A* 算法,目前基于简单的欧几里德距离启发式算法。我的游戏世界被表示为一个单元网格,要么被障碍物占据,要么未被障碍物占据。必须使用 A* 计算路径的角色可以向任何方向移动(如果没有被阻挡),而不仅仅是 N/E/S/W。
好的,这样基本上就可以正常工作了。现在我需要向 A* 启发式函数添加另一个参数,即与每个网格单元相关的成本值。该成本值越高,我们的角色就越应该尝试避开该单元格。
但是,我无法更改启发式函数以仅使用每个网格单元格的成本值,因为单元格到 A* 目标位置的距离仍然很重要。角色应该尽量避开任何高成本单元,但同时也不能距离目标位置太远。因此,我需要在单元格的距离和成本值之间进行“权衡”。
理想情况下,我希望找到一种解决方案,使我能够轻松调整/优化单元格距离与其成本值之间的关系,以便我可以微调启发式。
有什么想法可以实现这一目标吗?
最佳答案
当您使用任何最短路径算法(A* 或 Dijkstrs)时,每个节点都需要一个成本值。
因此,您必须自己思考一个如何将距离(您的单元格)与障碍物成本结合起来的公式。
您可以创建一个 cost() 函数,该函数采用长度成本加上障碍物成本。
关于algorithm - 如何向 A* 启发式添加更多参数而不仅仅是距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14668520/