在平铺的2d世界中实现寻路

时间:2013-11-17 19:37:20

标签: path-finding a-star depth-first-search

我有一个由瓷砖制成的2d世界。瓷砖要么是合格的,要么是不合格的,要么有某种运动​​损失。

所有实体和图块都有自己的命中框和大小以进行碰撞检测。 每个瓷砖的尺寸为16x16px。

我读过的大多数例子似乎表明我们正在从一个瓷砖的中心移动到另一个瓷砖的中心。正如我们从下面的图片中看到的那样,红色部分看起来不是最佳的,也不考虑实体尺寸。路径节点也被放置在2d阵列中,每个节点只有8个可能的方向。

enter image description here

但实际上最短路径不是这样的吗? enter image description here

我应该如何实现路径查找? 是否应将切片拆分为较小的节点以进行寻路,或者是否有其他方法可以获得更准确的路径?即使我将每个图块分割为10x10个寻路节点,它仍然找不到2个点之间的最短线。

是否应该有超过8个方向?如果有,应该如何实施?

例如,如果我的世界是50x50瓷砖大,那么寻路地图应该如何以及应该如何生成?

1 个答案:

答案 0 :(得分:1)

这取决于你对"最短路径"的定义。以及你打算用它做什么。

在您的示例中,您似乎认为有效移动是从一个磁贴的中心到无障碍视图中任何其他磁贴的中心。您如何验证移动到部分遮挡的瓷砖尚不清楚。这与几何上最短的路径不同,后者显然会拥抱墙壁,而现实的最短路径将使用单位宽度和转弯半径来避免墙壁和方向的突然变化。

一种常见的方法是像往常一样使用A *,然后以多种方式对路径进行后处理以优化和平滑它。这适用于像您这样的基于网格的世界,以及更一般的导航。

Gamasutra对此称为Toward More Realistic Pathfinding有一个很好的概述,其中包括平滑曲折和添加曲线的各种想法和技术,以及优化具有加速度和方向的单位的路径。