寻找游戏的路径

时间:2012-04-22 18:53:36

标签: path-finding

在所有类型的游戏中使用哪些路径查找算法? (在角色移动的所有类型中,无论如何)Dijkstra曾被使用过吗?我真的不想编码任何东西;只是做一些研究,但如果你粘贴伪代码或其他东西,那就没问题了(我可以理解Java和C ++)。

我知道A *就像在2D游戏中使用的算法。这很棒,但是那些不是基于网格的2D游戏呢?像帝国时代,或链接的觉醒。没有明确的方形空间可供导航,所以他们做了什么?

3D游戏有什么作用?我已经读过这个东西http://www.ai-blog.net/archives/000152.html,我听说它是​​这个主题的一个很大的权威,但它并没有真正解释如何,一旦网格设置,路径发现就完成了。如果A *是他们使用的,那么在3D环境中如何完成?那些样条曲线究竟如何用于圆角?

1 个答案:

答案 0 :(得分:8)

Dijkstra算法计算图表中所有节点的最短路径,这些节点可从起始位置到达。对于普通的现代游戏来说,这既不必要又非常昂贵。

您在2D和3D之间做了区分,但值得注意的是,对于任何基于图形的算法,搜索空间的维数都没有区别。您链接的网页讨论了航点图和导航网格;两者都是基于图形的,原则上可以在任何数量的维度上工作。虽然没有“明显的方形空间可以移动到”,但是AI可以移动到的空间中的离散的“槽”,并且已经由游戏设计者精心布置。

总结,A *实际上是在3D游戏中使用的算法,就像在2D游戏中一样。让我们看看A *是如何工作的:

  1. 一开始,您知道当前位置的坐标和 你的目标位置。你对此做出了乐观的估计 到目的地的距离,例如直道的长度 起始位置和目标之间的界限。
  2. 考虑图中的相邻节点。如果他们中的一个是你的 目标(或包含它,如果是导航网格),你就完成了。
  3. 对于每个相邻节点(在导航网格的情况下,这可以 是多边形的geometric center或其他类型的 中点),估计沿途旅行的相关费用 两个度量的总和:你旅行过的路径的长度 远,还有另一个乐观的距离估计 必须被覆盖。
  4. 按照估算的费用对上一步中的选项进行排序 以及您之前考虑过的所有选项,并选择 具有最低估计成本的选项。从第2步开始重复。
  5. 我在这里没有讨论过一些细节,但这应该足以看出A *基本上与你的空间维数无关。您还应该能够看到为什么这适用于连续的空间。

    有一些密切相关的算法可以解决标准A *搜索中的某些问题。例如,递归最佳优先搜索(RBFS)和简化的内存限制A *(SMA *)需要较少的内存,而学习实时A *(LRTA *)允许代理在计算完整路径之前移动。我不知道这些算法是否实际用于当前的游戏。

    对于角的圆角,可以使用距离线(角部由圆弧替换)或使用任何类型的spline函数进行全路径平滑。

    此外,算法可能依赖于搜索空间上的梯度(空间中的每个点与值相关联),而不是图形。这些可能不适用于大多数游戏,因为它们需要更多的时间和记忆,但无论如何都可能很有趣。示例包括各种hill-climbing algorithms(默认为实时)和potential field方法。

    也存在从连续空间程序性地获取图形的方法,例如cell decompositionVoronoi skeletonizationprobabilistic roadmap skeletonization。前者会产生与导航网格兼容的东西(尽管可能很难使其与手工制作的导航网格同样有效),而后者则产生的结果更像是航点图形。所有这些以及潜在的野外方法和A *搜索都与机器人相关。


    来源: