塔防的瞄准计算

时间:2011-09-19 10:33:01

标签: java math interpolation equation aim

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

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

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

min(t1+t2) = min(t3)

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

2 个答案:

答案 0 :(得分:4)

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

我们可以击中怪物的最早时间是怪物(预测)路径上的第一个位置,怪物和子弹会在这里进行致命的会面。

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

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

答案 1 :(得分: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)移动。如果这个值为负值,那么怪物太快并且在子弹射击之前到达塔楼