在所有类型的游戏中使用哪些路径查找算法? (在角色移动的所有类型中,无论如何)Dijkstra曾被使用过吗?我真的不想编码任何东西;只是做一些研究,但如果你粘贴伪代码或其他东西,那就没问题了(我可以理解Java和C ++)。
我知道A *就像在2D游戏中使用的算法。这很棒,但是那些不是基于网格的2D游戏呢?像帝国时代,或链接的觉醒。没有明确的方形空间可供导航,所以他们做了什么?
3D游戏有什么作用?我已经读过这个东西http://www.ai-blog.net/archives/000152.html,我听说它是这个主题的一个很大的权威,但它并没有真正解释如何,一旦网格设置,路径发现就完成了。如果A *是他们使用的,那么在3D环境中如何完成?那些样条曲线究竟如何用于圆角?
答案 0 :(得分:8)
Dijkstra算法计算图表中所有节点的最短路径,这些节点可从起始位置到达。对于普通的现代游戏来说,这既不必要又非常昂贵。
您在2D和3D之间做了区分,但值得注意的是,对于任何基于图形的算法,搜索空间的维数都没有区别。您链接的网页讨论了航点图和导航网格;两者都是基于图形的,原则上可以在任何数量的维度上工作。虽然没有“明显的方形空间可以移动到”,但是AI可以移动到的空间中的是离散的“槽”,并且已经由游戏设计者精心布置。
总结,A *实际上是在3D游戏中使用的算法,就像在2D游戏中一样。让我们看看A *是如何工作的:
我在这里没有讨论过一些细节,但这应该足以看出A *基本上与你的空间维数无关。您还应该能够看到为什么这适用于连续的空间。
有一些密切相关的算法可以解决标准A *搜索中的某些问题。例如,递归最佳优先搜索(RBFS)和简化的内存限制A *(SMA *)需要较少的内存,而学习实时A *(LRTA *)允许代理在计算完整路径之前移动。我不知道这些算法是否实际用于当前的游戏。
对于角的圆角,可以使用距离线(角部由圆弧替换)或使用任何类型的spline函数进行全路径平滑。
此外,算法可能依赖于搜索空间上的梯度(空间中的每个点与值相关联),而不是图形。这些可能不适用于大多数游戏,因为它们需要更多的时间和记忆,但无论如何都可能很有趣。示例包括各种hill-climbing algorithms(默认为实时)和potential field方法。
也存在从连续空间程序性地获取图形的方法,例如cell decomposition,Voronoi skeletonization和probabilistic roadmap skeletonization。前者会产生与导航网格兼容的东西(尽管可能很难使其与手工制作的导航网格同样有效),而后者则产生的结果更像是航点图形。所有这些以及潜在的野外方法和A *搜索都与机器人相关。
来源: