问候所有,
我正处于我的一个爱好项目的设计阶段.我将开发一款3D空战游戏.(受HAWX启发).但我想知道AI如何为敌人的工艺品工作?我猜,他们不像FPS游戏那样沿着路径(在图表上找路径)移动.我可以使用什么样的算法来进行敌人的工艺运动?我可以使用任何AI库吗?
注意:我使用irrlicht引擎,C++作为我的开发环境.
找到拦截点的简单答案......
在任何时间点,做一个直线假设.您和您的目标以固定速度直线行驶.因此,您可以从目标中减去位置和运动,并使用目标相对位置和速度.
一个有趣的时间点是你的目标尽可能接近(在该线上) - 该线上的最近点.IIRC,可以使用矢量点积计算...
P . V t = - ----- V . V
假设我做对了,此时目标路径与从你到目标的直线成直角(与它和你的动作之间的角度不一样).你可以使用三角函数得到一个等价的答案(点积与余弦相关),我甚至用一个联立方程方法计算出来(不知道更好)一次,对于我开始但从未在很多年前完成的2D游戏(想想在oid /推力式旋转推力船与重力之间的战斗).
由此,您可以确定最近点的位置和距离.
计算此时间以获得当前速度和方向的微小变化,您可以针对不久的将来拦截进行迭代优化.当然,最小化t会带来进入过去的可能性 - 逃跑!也许最小化平方会更好,但是你有其他并发症 - 如果敌人就在你身后,你真的想放慢速度吗?
无论如何,对于一个简单的导弹来说,这可能已经足够了,但当然很少用于混战.我对此的印象更像是一种模拟实时国际象棋,大多数时候你无法看到大部分的棋盘.显然,你不能用极小极限,所以你需要更高级别的动作模型而不仅仅是操纵杆和其他控制设置.在开始为它设计AI引擎之前,需要对基于人类经验的策略进行一些研究.
但是,为了利用地形覆盖,你可以做一些更简单的事情.基于图形的路径查找器可能与绘制通过山谷的路线相关.做大部分的寻路的2D和调整地图相对平稳变化的"谎言",以确保您不会飞直入悬崖.
可能你需要一个不同类型的目标和策略的系统,以及在它们之间加权和选择的方式.离你的目标很远,你更有可能试图保持掩护,而不是你靠近.当你的导弹落在你自己的尾巴上时,它将优先于你可能采取的任何进攻行动,等等.
顺便说一句 - 这一切都不是来自游戏开发的真实体验(我当然从来都不是任何描述的飞行员)所以对待它是模糊的建议,可能不会成功.并且要注意 - 我的2D游戏永远不会完成的一个原因是因为尝试编写AI代码起初非常有趣,后来又如此令人沮丧 - 当你最好的人工智能尝试击败你的唯一方法时,这是非常烦人的拥有多倍的船只和无限的弹药供应.