6

大家好,

我正处于我的一个爱好项目的设计阶段。我将开发一款 3D 空战游戏。(受 HAWX 启发)。但我想知道人工智能是如何为敌方飞船工作的?我想,它们不会像在 FPS 游戏中那样沿着路径移动(图上的路径查找)。我可以使用什么样的算法来移动敌方飞船?我可以使用任何 AI 库吗?

注意:我使用 irrlicht 引擎,C++ 作为我的开发环境。

4

1 回答 1

5

寻找拦截点的简单答案...

在任何时候,做一个直线假设。你和你的目标以固定的速度直线行驶。因此,您可以从目标中减去您的位置和运动,并使用目标的相对位置和速度。

一个有趣的时间点是当你的目标尽可能接近(在那条线上)时——那条线上最近的点。IIRC,可以用矢量点积计算...

      P . V
t = - -----
      V . V

假设我做对了,此时目标路径与从您到目标的线成直角(与其与您的运动之间的角度不同)。您可以使用三角函数得到等效的答案(点积与余弦相关),我什至使用联立方程法一次计算出来(不知道更好),对于我多年前开始但从未完成的 2D 游戏(想想oids/推力式旋转和推力船之间的战斗)。

由此,您可以确定最近的点在哪里以及距离有多远。

计算当前速度和方向的微小变化的时间,您可以迭代地优化近期的拦截。当然,最小化 t 会带来 t 可能会更进一步进入过去的可能性——逃跑!也许最小化 t 平方会更好,但是你还有其他并发症——如果敌人就在你身后,你真的想放慢速度吗?

无论如何,这对于一个简单的导弹来说可能就足够了,但在混战中当然很少用。我对此的印象更像是一种模拟实时国际象棋,在大多数情况下你看不到大部分棋盘。显然,您不能将其最大化,因此您需要一个更高级别的模型来了解移动的含义,而不仅仅是操纵杆和其他控制设置。在开始为它设计人工智能引擎之前,这需要对基于人类经验的策略进行大量研究。

但是,为了利用地形中的掩护,您可能可以做一些更简单的事情。基于图形的路径查找器可能与绘制穿过山谷的路线有关。在 2D 中进行大部分寻路,并调整地图相对平滑的变化“谎言”,以确保您不会直接飞入悬崖。

可能您需要一个包含不同类型目标和策略的系统,并在它们之间进行加权和选择。离你的目标很远,你更有可能试图留在掩体而不是你接近时。当您自己的尾巴上有导弹时,它将优先于您可能采取的任何进攻性行动,依此类推。

顺便说一句 - 这些都不是来自游戏开发的真实经验(我当然从来没有成为任何描述的飞行员)所以对待它是可能不会成功的模糊建议。并且要小心——我的 2D 游戏从未完成的一个原因是因为尝试编写 AI 代码一开始非常有趣,后来变得如此令人沮丧——当你对 AI 的最佳尝试可以击败你的唯一方法是通过拥有更多的船只和无限的弹药供应。

于 2010-10-04T03:50:19.603 回答