我正在和Java的一些朋友一起制作一个塔防小游戏。现在,我已经分配了塔的逻辑,现在我想弄清楚塔如何旋转才能瞄准并击中目标怪物。因为怪物在塔旋转射击时继续前进,所以它需要瞄准 future 的位置。我已经实现了一个函数,该函数可以在任何时间给我一个怪物的位置,还可以实现一个函数,它可以使我转向怪物所需的角度较小,但是现在我很困惑,因为存在三个未知变量:

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

  • 因此,我正在寻找以下解决方案:
    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)。如果该值为负,则表示怪物太快,无法在发射子弹之前到达塔楼

    10-01 20:35