寻找游戏的路径

Poj*_*ojo 5 path-finding

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

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

3D游戏有什么作用?我已经读过这个东西http://www.ai-blog.net/archives/000152.html,我听说这是一个关于这个主题的伟大权威,但它并没有真正解释如何,一旦网格设置,路径查找完成.如果A*是他们使用的,那么在3D环境中如何完成?花键究竟是如何为圆角设计的?

Jul*_*ian 8

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

您对2D和3D进行了区分,但值得注意的是,对于任何基于图形的算法,搜索空间的维数都没有区别.您链接的网页讨论了航点图和导航网格; 两者都是基于图形的,原则上可以在任何数量的维度上工作.虽然没有"明显的方形空间移动到"外,还有不连续的"槽",在空间的AI可以移动并已经由游戏设计师经过精心奠定的.

总之,A*实际上是在3D游戏中使用的算法,与2D游戏一样多.让我们看看A*是如何工作的:

  1. 在开始时,您知道当前位置和目标位置的坐标.您可以对到目的地的距离进行乐观估计,例如起始位置和目标之间的直线长度.
  2. 考虑图中的相邻节点.如果其中一个是你的目标(或包含它,如果是导航网格),你就完成了.
  3. 对于每个相邻节点(在导航网格的情况下,这可以是多边形的几何中心或某种其他类型的中点),估计沿着那里行进的相关成本作为两个度量的总和:路径的长度你到目前为止已经旅行了,还有另一个乐观的估计距离仍然需要覆盖.
  4. 从上一步骤中选择其估算成本以及您之前考虑过的所有选项,并选择估算成本最低的选项.从第2步开始重复.

我在这里没有讨论过一些细节,但这应该足以看出A*基本上与你的空间维数无关.您还应该能够了解为什么这适用于连续空间.

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

至于拐角的圆角,可以通过距离线(其中拐角由圆弧替换)或者使用任何类型的样条函数进行全路径平滑来完成.

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

还存在从连续空间程序性地获得图的方法,例如细胞分解,Voronoi骨架化概率路线图骨架化.前者会产生与导航网格兼容的东西(尽管可能很难使其与手工制作的导航网格同样有效),而后者则产生的结果更像是航点图形.所有这些以及潜在的野外方法和A*搜索都与机器人技术相关.


资料来源: