A *寻路 - 最接近不可行走的目的地

时间:2012-11-16 02:25:14

标签: path-finding a-star

我已经有一个可行的A *实施。问题是,如果您选择一个不可行的目的地,则不会返回任何路径。我希望能够得到我能得到的“最接近的”。

优选的选项是完全动态的(不只是检查目的地周围的8个图块以尝试找到一个)。这样一来,即使他们点击了一块巨大的不可行走的瓷砖包围的不可行走的瓷砖,它仍然会尽可能接近。

2 个答案:

答案 0 :(得分:2)

虽然这里提供的简单答案可能足够,但我认为这取决于你的游戏类型以及你想要达到的目标。

例如,参加这个游戏领域(对不起,我正在重复使用我用来向你展示战争迷雾的相同软件:)):

play field

正如您所看到的,愤怒的鸡正在阻挡左侧和右侧之间的路径。愤怒的鸡可能是任何东西......如果它是一个静态障碍,那么最低h node可能就足够了,但如果它是一个动态物体(如锁着的门,画桥等......)以下示例可能会帮助您了解如何解决问题。

如果我们在另一边设置Hero的目的地

destination

我们需要思考我们想要的道路,因为显然我们无法达到它。使用manhattan距离或euclidian距离等标准启发式,您将得到以下结果:

dumb path

哪个可能够好,但是如果我们的小英雄有任何方式可以与鸡肉进行交互,那么它根本就没有意义,你想要的是这个

interact path

你怎么能这样做?好吧,一个简单的方法是在hierarchical graphs上寻找路径。这听起来很复杂,但事实并非如此。首先,您希望能够构建一组新的高级节点和边,其中包含多个网格节点(或其他表示,不会改变事物)

enter image description here

如您所见,我们现在有一个权利blue node和一个red node。箭头表示两个节点之间的边缘。你问的如何构建这个图表?这很简单,只需从一个开放节点开始,扩展所有邻居并将它们添加到高级节点,完成后,打开可能导致图的另一部分的动态节点并执行相同的操作。

现在,当你要求从我们的英雄到红色X的路径时,你首先在高层进行寻路...是否有从blue node到{{1}的方法}?是!通过鸡肉。

您现在可以通过转到允许您穿越的red node轻松地了解如何在蓝色方向导航,这是鸡。

interact path

如果它只是一个普通的墙,你可以通过访问一个节点很快确定没有办法到达另一边,然后按照你想要的方式处理它,可能仍然执行A *和返回最低edge节点。

答案 1 :(得分:1)

您可以保留一个指针,该指针包含具有最低h值的图块,如果没有返回路径,则只需生成您要保留的图块的路径。