最大限度地减少游戏中的AI使用

时间:2013-08-20 10:21:08

标签: java 2d artificial-intelligence game-engine jogl

我一直在制作一个2D自上而下的射击游戏,我已经实现了大部分游戏并在JOGL中从头开始编写引擎但是我遇到了一个小问题并希望得到其他人的观点如何最好地解决问题。因此,我在地图中的随机位置生成小兵,并且这些小兵中的每一个都使用A *路径查找,它已经过优化以最大限度地减少不必要的检查,但地图很大,可以是10x10到​​200x200的任何瓷砖,并且唯一的减缓显着下来的是人工智能,我也试图实现一种基于距离的解决方案,其中小兵一直处于空闲状态,直到我处于一定的范围内,但由于产生了许多小兵,这仍然会减慢游戏速度。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

有很多方法可以加速你的代码。

首先 - 可以使用A *算法的许多修改,例如:

如果你的小兵正在搜索播放器的路径(所有小兵都有一个目标),那么其他修改可能更具针对性,那么你可以将搜索更改为以下算法之一:

  • 使用Dijkstra算法计算从玩家到地图中每个点的距离,对于200x200,它将非常快(使用O(nlgn)算法的40,000个顶点),并且只需将您的蠕变移动到任何与玩家距离较近的相邻点,然后是当前的
  • 从播放器运行A *搜索到任何蠕变(例如ID最低),一旦找到路径 - 将目标改为下一个蠕变,但重置算法本身,如果使用已计算的路径和距离(因为它们已经是来自玩家的最佳路径),显然 - 如果在执行期间遇到另一个蠕变然后你的目标 - 你只需记录它(找到的路径是最佳的)。

另一种可能的修改,如果您的地图以某种方式特定(包含其某些部分的门/入口),则可以应用这种修改是放置触发器,“启用”爬行AI。这是O(1)解决方案,但需要特定类型的地图。

最后一个想法是实施一些次优解决方案,例如:

  • 首先,计算每个蠕变的A *
  • 如果到玩家的距离小于某个阈值T,那么在下一次迭代中 - 重新计算你的路径,所以没有滞后
  • 否则 - 在另一个路径搜索之前按照您的路径进行至少10-50次迭代

还有无数的优化,但我们需要有关您的游戏的更多详细信息以及您希望花在这些优化上的时间。