4

我正在和一些朋友用 Java 构建一个小型塔防游戏。现在我被分配了塔的逻辑,目前我正试图弄清楚塔必须如何转向瞄准并击中目标怪物。因为怪物在塔转动和射击时继续前进,它需要瞄准未来的位置。我已经实现了一个函数,它给了我一个怪物在任何时间 t 的位置,还有一个函数,它给了我转向怪物所需的更小的角度,但现在我很困惑,因为有三个未知变量:

  • t1 or angle:塔需要转动的时间或角度(给定塔可以转动的速度)
  • t2 或射击距离:子弹击中目标所需的时间(速度也给定,恒定)。
  • t3 或移动距离:怪物在同一时间内移动的距离。

所以我正在寻找解决方案:

min(t1+t2) = min(t3)

目标怪物仍在塔的范围内。我已经考虑过用最大需要转弯和最大可能范围进行计算,然后逐步递减,但我很好奇是否有“完美”的非启发式解决方案?

4

2 回答 2

4

对于每个坐标,我们可以计算出子弹在该位置所需的时间t B。那是转弯时间加上子弹需要的时间(t 1 + t 2)。

我们能击中怪物的最早时间是怪物(预测)路径上的第一个位置,怪物和子弹在这里发生致命的相遇。

我将从怪物的位置开始,计算野兽的时间和位置,并计算子弹是否会更早或更晚到达。

如果您只是转动并检查每个度数,或者如果您现在开火可以杀死怪物,则可以消除其中一个变量。您将只有两个向量(瞄准,怪物移动方向)与一个交点,并且只需测试怪物和子弹是否同时在那里相遇(到交点的距离,速度)。

于 2011-09-19T10:56:22.047 回答
3

添加信息:

我假设一个给定的怪物到塔的距离为 D,沿着到塔的最短路径移动,然后塔开始转向怪物。这是 的情况t=0

固定错字:

如果您的塔以角速度 转动omega,即phi时间角度t

phi = omega * t

所以如果你知道你的塔必须转一个角度phi,子弹就会射向

t = phi/omega

从此子弹速度v行进的距离为

s(t) = v * (t-phi/omega)

如果你的怪物移动速度快vm,怪物就会在远处d

d(t) = D - vm * t

如果子弹击中怪物

s(t) = d(t)

这个方程很容易求解:只需替换d(t)并重新s(t)排列得到的项t

t = (D + v * phi/omega) / (phi/omega + vm)

而子弹会s(t)在这一刻移动。如果这个值为负数,怪物速度太快,在子弹发射之前就到达了塔楼

于 2011-09-19T11:04:27.983 回答