我一直在为我正在开发的基于平台游戏的游戏寻找一种可靠的寻路方法,而A *似乎是目前最好的方法。我在Godot中的there is a demo实现中注意到了AStar。但是,它是为基于网格/平铺的游戏编写的,我很难将其适应于Y轴受重力限制的平台游戏。
我发现a really good answer描述了A *如何应用于Unity中的平台开发人员。我的问题是...是否可以在Godot中使用AStar来实现上述答案中所述的相同内容?不使用内置的AStar框架,是否可以做得更好?关于它如何在GDscript中(不管有没有AStar)如何工作的真正简单的例子是什么?
尽管我已经发布了100分的赏金(并且它已经过期),但我仍然愿意再发布100分的赏金并授予它,以待对此问题的答案。
PS:如果您在此问题的正文中发现您认为不合适,需要关注或澄清的内容,请不要对我投反对票!表现出一些正直并发表评论。您正在做的事情正在伤害其他投票给我的人,而这些人实际上对回答这个问题很感兴趣。
答案 0 :(得分:0)
您可以将 Navigation2D 节点重新用于平台游戏目的。下图显示了一个示例用法。 Navigation2D 节点可以导航位于组合导航多边形内的两点之间的最短路径(这是所有 NavigationPolygonInstances 的并集)。
您可以使用 get_simple_path
方法获得一个 vector2 数组,该数组描述了您的代理/角色应该按顺序尝试到达(或接近,通过使用一些预定义的边距)的点。将每个点放入队列中,然后通过水平移动角色将其移向不同的点。每当您的代理在队列中的下一个点太高而无法到达时,您就可以让代理跳转。
我希望这是有道理的!
灰色/深蓝色矩形是有碰撞的平台,而绿色形状是 NavigationPolygonInstance 节点
这种方法绝不是完美的。如果您要在游戏中实现斜坡,则代理可能会跳上斜坡而不是正常上升。创建所需的所有形状也很乏味。
更强大的解决方案是拥有一个自定义图形系统,您可以将其放置在场景中并定位其顶点。这开辟了制作单向路径的可能性,并且顶点之间的某些边/连接仅标记为“可跳跃”。如果您在网上找不到任何此类解决方案,这需要做更多的工作。