因此,我一直在这个名为Greenfoot的框架中制作这款自上而下的2D Java游戏,并且我一直在为您要战斗的家伙开发AI。我希望他们能够现实地环游世界,因此我很快意识到,除其他事项外,我需要某种寻路。
我已经制作了两个A *原型。一个是基于网格的,然后我制作了一个与航路点一起使用的栅格,因此现在我需要找到一种方法,从障碍物/建筑物的二维“图”获取可以作为路径的节点图。实际的寻路似乎很好,只是我的打开和关闭列表可以使用更有效的数据结构,但是如果需要的话,我会解决的。
我打算出于所有原因在ai-blog.net上使用导航网格。但是,我面临的问题是,A *认为从多边形中心/边开始的最短路径不一定是通过节点的任何部分的最短路径。为了获得更好的主意,您可以查看我在stackoverflow上提出的问题。
关于可见度图,我得到了很好的答案。从那以后,我已经购买了《计算几何:算法和应用程序》这本书,并进一步阅读了该主题,但是我仍然偏爱导航网格物体(请参阅Amit关于路径查找的注释中的 “ 管理复杂性 ” )。(作为附带说明,如果第一个和最后一个不被遮挡,也许我可以使用Theta *将多个航路点转换为一条直线。或者每次我移回最后一个航路点之前,查看是否可以从这个)
因此,基本上我想要的是一个导航网格物体,一旦将其通过漏斗算法(例如,来自Digesting Duck的那个),我将获得真正的最短路径,而不是仅是从节点到节点的最短路径,但不是实际的最短距离,因为您可以穿过一些多边形并跳过节点/边。
哦,我也想知道您建议如何存储有关多边形的信息。对于航路点原型示例,我只是将每个节点作为一个对象,并存储了可以从该节点访问的所有其他节点的列表,我想这对多边形不起作用吗?以及如何判断多边形是可打开/可穿越的还是实心的?如何存储组成多边形的节点?
最后,作为记录:即使确实已有其他解决方案,我也希望自己从头开始编写此程序,并且我不打算在此游戏以外的任何其他程序中使用此代码,所以这无关紧要它将不可避免地是劣质的。