【问题标题】:Flight game AI algorithm?飞行游戏AI算法?
【发布时间】:2011-04-20 14:56:58
【问题描述】:

大家好,

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

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

【问题讨论】:

    标签: algorithm artificial-intelligence game-ai


    【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 嗨,史蒂夫感谢您的提示。实际上我的问题并不具体。我想我必须为敌国保留一个状态机。 (例如:攻击建筑物、攻击玩家、追逐玩家、防御玩家导弹等)。并且取决于算法应该改变的状态。我想知道他们是如何在 H.A.W.X 等游戏中实现人工智能的!
    • 我认为你不能忽略绝对速度。介质(空气)处于静止状态,对您的机动方式有很大影响。
    • @ziggystar - 最近点计算假设一个恒定的速度。为了选择优化的微小变化,考虑模拟飞机的近似限制是有意义的,但这是为了设定目标,而不是决定飞机将实际实现什么。决定飞机的真实性能是物理引擎的工作,而不是人工智能引擎。一个更复杂的 AI 可能需要一个复杂的物理模型,但这与物理无关——它与 AI 相关,而且是非常简单的 AI。
    • @umanga - 很抱歉,我从未玩过 HAWX。您可能需要一个状态机来处理您所描述的内容,但我对此几乎没有什么建议 - 实施将取决于具体细节。
    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多