【问题标题】:Pathfinding between obstacles that sit on top of walkable tiles位于可步行瓷砖顶部的障碍物之间的寻路
【发布时间】:2020-05-31 17:48:33
【问题描述】:

以下图为例。考虑以下 -

  • 蓝色方块是玩家
  • 橙色广场是第一个目的地
  • 粉色方块是第二个目的地
  • 绿色方块是可步行的瓷砖
  • 黑色方块是可行走瓷砖顶部的墙壁/障碍物
  • 每个图块是 4x4

这里的预期行为是 -

  1. 走到橙色方块会导致直线向下
  2. 走到粉色方块(从蓝色方块)绕着黑色方块走近

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

话虽如此,当前的实现导致了这种情况,因为我别无选择,只能坚持使用 4x4 网格,并且不将整个图块标记为不可行走,它会剪切对象。红色瓷砖无法行走。

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

【问题讨论】:

    标签: javascript shortest-path path-finding game-development a-star


    【解决方案1】:

    解决方案的想法:

    第一个解决方案显然是通过将每个图块设置为 1x1 来提高 A* 准确度。

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

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

    希望对你有帮助

    【讨论】:

    • 原来我想多了 - 我重新格式化了我的数据以包括瓷砖是否包含墙壁以及墙壁阻挡的方向,然后在查找瓷砖邻居时使用此数据。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2011-08-25
    • 1970-01-01
    • 2019-11-20
    • 2019-05-10
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多