我决定重拾以前的2D游戏引擎并继续开发它,这是我第一次尝试为敌人实现基本的AI,但是遇到了一些问题。以下是我处理敌人AI的方法:
如果玩家在敌人的范围内,敌人会朝着玩家移动,只需检查他是否在玩家的上下左右,并相应地调整坐标。
如果敌人遇到阻碍它向玩家移动的障碍物,我会调用我的A*算法来检测到玩家的最短路径并绕过障碍物。
我每帧都会检查敌人是否不再受阻,并且如果是,则再次调用A*算法以根据玩家的移动位置进行调整。
我的A*算法实现方式是基于敌人的尺寸检查相邻的方格。例如,如果我有一个60x60的敌人,我将在这些尺寸内检查相邻的网格。同时,敌人的大小可以不同。我遇到的问题如下:
假设敌人是黑色正方形。它检查相邻的方格,并可以向前移动到该方格,因为它没有与该方格中的任何对象发生碰撞。一旦它在上面的正方形,它可以通过右侧的正方形而不发生碰撞。现在看看这种情况:
假设当敌人处于黑色正方形位置时调用A*算法。由于没有足够的空间让敌人在顶部墙之间移动,所以会发生碰撞,并且根据我的算法,这将导致敌人忽略此块。
因此,我的问题是:解决这个问题的最常见方法是什么?我可能缺少了一些傻瓜式的东西,但我想问问。希望我已经足够清楚地解释了我遇到的问题,如果您需要任何澄清,请随时询问。提前致谢。