【发布时间】:2020-09-09 13:22:39
【问题描述】:
我在没有权重的 2D 网格上有带有 A* 脚本的 AI。使用这些 AI 管理“无路径”情况的理想或典型方式是什么,例如AI 在哪里被无法行走的瓷砖挡住了它们的最终目标?我可以看到打开列表的上限,但这似乎是任意的——毕竟通往目标的路径可能很长——但是解决这个问题的典型方法是什么?
【问题讨论】:
我在没有权重的 2D 网格上有带有 A* 脚本的 AI。使用这些 AI 管理“无路径”情况的理想或典型方式是什么,例如AI 在哪里被无法行走的瓷砖挡住了它们的最终目标?我可以看到打开列表的上限,但这似乎是任意的——毕竟通往目标的路径可能很长——但是解决这个问题的典型方法是什么?
【问题讨论】:
通常,A* 应该限制它应该执行的迭代次数。没有可以使用的“默认限制”,因为您可以使用多种策略对此进行测试。
TLDR:使用Divide and conquer 简化较小问题的解决方案以获得最佳结果,并将您的 A* 限制在有限空间或迭代量。
从最差到最好列出。
【讨论】:
如果两个图块之间从来没有任何可步行的路径,则它们没有理由成为同一个图的一部分。如果地图是静态的,您可以使用 Djikstra 将地图预处理为保证在所有图块之间具有有效路径的部分。
如果地图是完全动态的,您可能必须设置节点数量的硬性上限。
如果只能阻止/解除阻止特定节点,您可能需要多级策略。 IE。为每个部分创建一个节点并在此图中运行初步路径查找。
对于诸如节点被 NPC 阻塞之类的问题,需要另一种解决方案,例如在寻路期间忽略它们并在发生冲突时处理它们。
【讨论】: