在我的 2d 游戏中,我想创建一个可以向玩家“射击”的智能机器人。
假设我可以传递给我的机器人:
actual xEnemy, yEnemy
also enemy speed and angle direction
考虑到 Bot 必须将枪旋转到正确的方向,我该如何计算“射击地点”?
这对我来说真的是个大问题,因为..我数学绝对不好!
在此先感谢您的宝贵帮助!
最佳答案
符号:我用大写字母写向量,用小写字母写标量,∠V 表示向量 V 与 x 轴的夹角。 (您可以使用多种语言的 atan2
函数进行计算。)
最简单的情况是可以立即旋转的固定射手。
设目标在位置 A 并以速度 VA 移动,射手静止在位置 B 并能以速度 s 发射子弹。让射手在时间 0 开火。子弹在时间 t 命中,使得 |A − B + t VA| = ts。这是 t 中的一个简单的二次方程,您应该能够轻松求解(或确定无解)。确定 t 后,您现在可以计算出触发角,即 ∠(A − B + t VA)。
现在假设射手不是静止的,而是具有恒定的速度 VB。 (我在这里假设牛顿相对论,即子弹速度加到射手的速度上。)
计算击中时间仍然是一个简单的二次方程:|A − B + t(VA − VB)| = ts。在这种情况下,触发角为 ∠(A − B + t (VA − VB))。
如果射手等到时间 u 再开火怎么办?然后当 |A − B + t(VA − VB)| 时子弹击中目标= (t − u) s。触发角仍然是 ∠(A − B + t(VA − VB))。
现在解决你的问题。假设射手可以在时间 r 内完成半圈。那么它肯定可以在时间 r 触发。 (基本上:计算出必要的射击角度,如果有的话,在时间 r 射击,如上所述,旋转到那个角度,停止,等到时间 r,然后开火。)
但是您可能想知道射手可以开火的最早时间。这就是您可能想要使用逐次逼近来找到它的地方。 (算法草图:你能在时间 0 开火吗?不能。你能在时间 r 开火吗?是的。你能在时间 ½ r 开火吗?不能。等等。)
关于algorithm - "shoot"在 2d 游戏中的目标的 AI 算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4107403/