Java 如何改进我的A-Star算法,使其能够计算整个形状的路径,而不仅仅是一个点?

Java 如何改进我的A-Star算法,使其能够计算整个形状的路径,而不仅仅是一个点?,java,algorithm,path-finding,slick2d,Java,Algorithm,Path Finding,Slick2d,我正在使用A-Star算法,这样敌人可以在我的游戏中找到通往玩家的路径,这样他们就可以攻击他。该算法是由Slick2D提供的,适合我的需要,如果需要,我可以提供代码 游戏是2D的,并且是基于瓷砖的,但是实体移动使用浮动,这意味着你可以同时在两个瓷砖上。每个敌人都有一个攻击箱,显然还有一个X和Y坐标。敌人的X和Y位置通常在命中框的左上角,这意味着由算法确定的路径的原点位于命中框的左上角。到目前为止,这还不错,而且算法有效 然而,我遇到的问题是,现在我只确定一个点到另一个点的路径(我猜这是算法的本质

我正在使用A-Star算法,这样敌人可以在我的游戏中找到通往玩家的路径,这样他们就可以攻击他。该算法是由Slick2D提供的,适合我的需要,如果需要,我可以提供代码

游戏是2D的,并且是基于瓷砖的,但是实体移动使用浮动,这意味着你可以同时在两个瓷砖上。每个敌人都有一个攻击箱,显然还有一个X和Y坐标。敌人的X和Y位置通常在命中框的左上角,这意味着由算法确定的路径的原点位于命中框的左上角。到目前为止,这还不错,而且算法有效

然而,我遇到的问题是,现在我只确定一个点到另一个点的路径(我猜这是算法的本质),但我没有考虑连接到此点的整个hitbox。由于敌人的x/y点位于左上角,因此算法可能认为它在前面一块,但是整个精灵和生命箱仍然在下面一块

澄清图片:

蓝色点周围的红色圆圈表示敌人的x和y在哪里。 很明显,它在白色障碍物上方。所以敌人试图向左移动。现在的问题是,整个hitbox和精灵都在下方,因此无法通过障碍物,因为它必须向上移动一块瓷砖(蓝色点所在的位置)

我没有使用敌人的X/Y点,而是使用了hitbox的中心作为A*的起始点的参数,但这导致了更尴尬的行为

所以我需要一个解决方案,在这个方案中,我的a*算法不仅使用一个点,还使用一个完整的点击框来确定路径


我很感谢你的建议

在每次迭代中探索后续步骤时,请检查整个复选框,以查看该步骤是否合法

只考虑那些允许整个图形移动的步骤。

这里的困难在于hitbox的概念。因为有时候是1平方,有时候是2平方。我也不知道如何真正解决这个问题。对不起:(

也许你可以自己解决这个问题,如果你试着先尽可能地“进入”方格,然后检查你的下一条路径。这样你就可以在那一点上拥有尽可能小的命中框,这样就不会限制你的移动