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

How to improve my A-Star algorithm in a way that it calculates a path for an entire shape, not only one point?

我正在使用 A-Star 算法,以便敌人可以在我的游戏中找到玩家的路径,以便他们可以攻击他。算法是Slick2D提供的算法,适合我的需要,需要的话我可以提供代码。

该游戏是基于 2D 和图块的游戏,但使用浮动进行实体移动,这意味着您可以同时在两个图块上。每个敌人都有一个碰撞箱,显然还有一个 X 和一个 Y 坐标。敌人的 X 和 Y 位置通常在 Hitbox 的左上角,这意味着算法确定的路径的原点在 Hitbox 的左上角。到目前为止一切正常,算法有效。

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

澄清图片:

那个蓝点周围的红色圆圈显示了那个敌人的 x 和 y 位置。 显然它在白色障碍物之上。所以敌人试图向左移动。现在的问题是整个碰撞箱和精灵都在下方,因此无法通过障碍物,因为它必须向上移动一个方块(蓝点所在的位置)。

我使用碰撞框的中心作为 A* 起点的参数,而不是敌人的 X/Y 点,但这导致了甚至更尴尬的行为。

所以我需要一个解决方案,我的 A* 算法不仅使用一个点而且使用整个碰撞盒来确定路径。

感谢您的建议!

在每次迭代中探索下一步时,检查整个碰撞箱以查看该步骤是否合法。

只考虑那些能让你的整个身材朝那个方向移动的步骤。

这里的难点在于碰撞箱的概念。因为有时它是 1 个正方形,其他时候它是 2 个正方形。我也不知道如何真正解决这个问题。对不起:(

如果您首先尝试尽可能地移动 "inside" 广场,然后检查您的下一条路径,也许您可​​以自己解决这个问题。这样你在那个时候就会有尽可能小的碰撞箱,这样就不会限制你的移动了。