如何将AStar应用于Godot平台游戏?

15
我一直在寻找一种适用于我正在开发的基于平台的游戏的强大的路径查找方法,A*看起来是最好的方法。我注意到Godot中有一个AStar实现的演示。然而,它是为基于网格/瓦片的游戏编写的,我正在尝试将其适应Y轴受重力限制的平台游戏。
我找到了一个非常好的答案,描述了如何在Unity中应用A*到平台游戏中。我的问题是...是否可能在Godot中使用AStar实现上述答案中描述的相同内容?是否可能不使用内置的AStar框架更好地完成这项工作?有没有一个非常简单的例子,展示了如何在GDscript中使用AStar或不使用AStar来实现它的工作原理?尽管我已经发布了100点赏金(并且已过期),但我仍然愿意再发布100点赏金,并颁发它,前提是回答了这个问题。

1
我不确定你想要哪些细节,因为你链接的线程已经提供了详细的描述。它描述了Astar算法的工作原理;它并不是特定于Unity的。在非瓷砖游戏中使用Astar的棘手之处在于建立具有适当移动成本的节点图。 - Andrew Hows
你用最后的陈述回答了你的第一个陈述。我想看看这在平台风格游戏中是如何实现的,具体来说,使用Godot的GDscript。这是链接中绝对不存在的东西。 - Matthew
你能找到一个可接受的解决方案吗?我即将着手解决同样的问题。 - Logain
我不确定这是否是您要寻找的,但是导航类怎么样? - Anutrix
我希望有一个能够满足我需求的函数/类,但目前没有。所有现有的函数/类似乎都是针对自由的x/y轴移动(俯视/等角视图)设计的。而我需要的是适用于平台游戏的功能,其中Y轴受重力限制。 - Matthew
1个回答

1
你可以重新使用Navigation2D节点以用于平台游戏。下面的图片展示了一个例子。Navigation2D节点使得在联合导航多边形(所有NavigationPolygonInstances的并集)内,能够导航两点之间的最短路径。
你可以使用get_simple_path方法获取一个向量2数组,该数组描述了代理/角色应按顺序尝试到达(或接近,通过使用一些预定义的边距)。将每个点放入队列中,并通过水平移动将角色朝不同的点移动。每当代理在队列中的下一个点太高无法到达时,您可以让代理跳跃。
希望这样说得清楚!

Godot engine Navigation2D example

灰色/深蓝色的矩形是具有碰撞的平台,而绿色的形状是导航多边形实例节点

这种方法并不完美。如果您将斜坡实现到游戏中,则代理可能会跳上斜坡,而不是正常上升。创建所需的所有形状也相当繁琐。

更强大的解决方案是拥有一个自定义图形系统,您可以将其放置在场景中并定位其顶点。这打开了制作单向路径并仅将某些边缘/连接标记为“可跳过”的可能性。但是,如果您找不到任何此类解决方案,则需要进行更多的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接