我正在和Java的一些朋友一起制作一个塔防小游戏。现在,我已经分配了塔的逻辑,现在我想弄清楚塔如何旋转才能瞄准并击中目标怪物。因为怪物在塔旋转射击时继续前进,所以它需要瞄准 future 的位置。我已经实现了一个函数,该函数可以在任何时间给我一个怪物的位置,还可以实现一个函数,它可以使我转向怪物所需的角度较小,但是现在我很困惑,因为存在三个未知变量:
因此,我正在寻找以下解决方案:
min(t1+t2) = min(t3)
目标怪物仍在塔的范围内。我已经考虑过用最大所需转弯和最大可能范围进行计算,然后逐步递减,但是我很好奇是否存在“完美”的非启发式解决方案?
最佳答案
添加的信息:
我假设给定的怪物到塔的距离为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)
。如果该值为负,则表示怪物太快,无法在发射子弹之前到达塔楼