我已经有一个可行的A *实施。问题是,如果您选择一个不可行的目的地,则不会返回任何路径。我希望能够得到我能得到的“最接近的”。
优选的选项是完全动态的(不只是检查目的地周围的8个图块以尝试找到一个)。这样一来,即使他们点击了一块巨大的不可行走的瓷砖包围的不可行走的瓷砖,它仍然会尽可能接近。
答案 0 :(得分:2)
虽然这里提供的简单答案可能足够,但我认为这取决于你的游戏类型以及你想要达到的目标。
例如,参加这个游戏领域(对不起,我正在重复使用我用来向你展示战争迷雾的相同软件:)):
正如您所看到的,愤怒的鸡正在阻挡左侧和右侧之间的路径。愤怒的鸡可能是任何东西......如果它是一个静态障碍,那么最低h node
可能就足够了,但如果它是一个动态物体(如锁着的门,画桥等......)以下示例可能会帮助您了解如何解决问题。
如果我们在另一边设置Hero的目的地
我们需要思考我们想要的道路,因为显然我们无法达到它。使用manhattan
距离或euclidian
距离等标准启发式,您将得到以下结果:
哪个可能够好,但是如果我们的小英雄有任何方式可以与鸡肉进行交互,那么它根本就没有意义,你想要的是这个
你怎么能这样做?好吧,一个简单的方法是在hierarchical graphs
上寻找路径。这听起来很复杂,但事实并非如此。首先,您希望能够构建一组新的高级节点和边,其中包含多个网格节点(或其他表示,不会改变事物)
如您所见,我们现在有一个权利blue node
和一个red node
。箭头表示两个节点之间的边缘。你问的如何构建这个图表?这很简单,只需从一个开放节点开始,扩展所有邻居并将它们添加到高级节点,完成后,打开可能导致图的另一部分的动态节点并执行相同的操作。
现在,当你要求从我们的英雄到红色X
的路径时,你首先在高层进行寻路...是否有从blue node
到{{1}的方法}?是!通过鸡肉。
您现在可以通过转到允许您穿越的red node
轻松地了解如何在蓝色方向导航,这是鸡。
如果它只是一个普通的墙,你可以通过访问一个节点很快确定没有办法到达另一边,然后按照你想要的方式处理它,可能仍然执行A *和返回最低edge
节点。
答案 1 :(得分:1)
您可以保留一个指针,该指针包含具有最低h值的图块,如果没有返回路径,则只需生成您要保留的图块的路径。