在位于可行走瓷砖顶部的障碍物之间寻路

Pathfinding between obstacles that sit on top of walkable tiles

以下图为例。考虑以下 -

此处的预期行为是 -

  1. 走到橙色方块会出现一条直线向下的线
  2. 走到粉色方块(从蓝色方块)走近黑色方块

我当前的实现采用瓷砖网格并将其交给典型的 A* 算法以获得到每个方块的最短路径。然而,仅仅因为瓷砖上有一堵墙并不意味着它不能行走——它应该意味着生成的路径不会穿过物体。

话虽这么说,但我别无选择,只能坚持使用 4x4 的图块网格,并且在不将整个图块标记为不可行走的情况下,它会穿过对象。红色地块无法行走。

它提供了一个非常笨拙的寻路系统,因为它会跳过非常精细的图块(以红色表示)。我的问题是,如何才能使墙壁不可剪裁,但它们所在的瓷砖仍然可以行走?

解决方案的想法:

第一个解决方案显然是通过让每个图块为 1x1 来提高 A* 精度。

另一个想法是在检查图块是否可行走时不要使用简单的 int 网格(或类似的)。 请改用函数或更复杂的数据结构,这些数据结构使用开始和结束图块来了解该路线是否可用。在这种情况下,每个 4x4 方块都有四种可能的路线(东、北、西、南),对于每条路线,您都必须知道它是否适合步行。如果您允许对角线移动,那么您将 store/compute 8 条路线用于平铺。

我无法给你更详细的答案,因为你没有展示任何你的实现。

希望对您有所帮助