path-finding - 我如何使 Godot 中的 AStar 适应平台游戏?

标签 path-finding a-star game-ai godot gdscript

我一直在为我正在开发的基于平台的游戏寻找一种可靠的寻路方法,A* 看起来是最好的方法。我注意到 there is a demoAStar在 Godot 中的实现。但是,它是为基于网格/图块的游戏编写的,我无法将其适应 Y 轴受重力限制的平台游戏。
我找到了 a really good answer描述了如何将 A* 应用于 Unity 中的平台游戏。我的问题是......是否可以在 Godot 中使用 AStar 来实现上述答案中描述的相同内容?如果不使用内置的 AStar 框架,这可能会做得更好吗?在 GDscript 中它如何工作(有或没有 AStar)的一个非常简单的例子是什么?
尽管我已经发布了 100 点赏金(并且已经过期),但我仍然愿意发布另一个 100 点赏金并奖励它,等待这个问题的答案。

最佳答案

您可以重新调整 Navigation2D 的用途用于平台游戏的节点。下图显示了一个示例用法。 Navigation2D 节点可以导航位于组合导航多边形内的两点之间的最短路径(这是所有 NavigationPolygonInstances 的并集)。
您可以使用 get_simple_path方法来获取一个 vector2 数组,该数组描述了您的代理/角色应该按顺序尝试到达(或接近,通过使用一些预定义的边距)的点。将每个点放入队列中,然后通过水平移动角色将其移向不同的点。每当您的代理在队列中的下一个点太高而无法到达时,您就可以让代理跳转。
我希望这是有道理的!
Godot engine Navigation2D example
灰色/深蓝色矩形是有碰撞的平台,而绿色形状是 NavigationPolygonInstance 节点
这种方法绝不是完美的。如果您要在游戏中实现斜坡,则代理可能会跳上斜坡而不是正常上升。创建所需的所有形状也非常乏味。
更强大的解决方案是拥有一个自定义图形系统,您可以将其放置在场景中并定位其顶点。这开辟了制作单向路径的可能性,并且顶点之间的某些边/连接仅标记为“可跳跃”。如果您在网上找不到任何此类解决方案,则需要做更多的工作。

关于path-finding - 我如何使 Godot 中的 AStar 适应平台游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52505872/

相关文章:

algorithm - "RaceTrack"游戏的AI算法

c++ - 创建一个简单的 2D AI C++

在游戏中寻找食物分配最佳路线的算法

python - 了解单目标迷宫的 A* 启发式算法

c++ - C++中的简单探路者

Linux CLI 查找没有子路径的 dir 路径 - 结果只有父路径

a-star - 路径未到达我的 A* 算法中的结束节点

algorithm - AStar - 名称解释

python - 计算网格中点组合之间的距离

javascript - 使敌人跟随移动玩家的问题