【问题标题】:Aiming Calculation at Tower-Defense瞄准塔防计算
【发布时间】:2011-09-19 10:33:00
【问题描述】:

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

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

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

min(t1+t2) = min(t3)

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

【问题讨论】:

    标签: java math interpolation equation aim


    【解决方案1】:

    对于每个坐标,我们可以计算出子弹在那个位置需要的时间tB。那就是转动时间加上子弹所需的时间(t1 + t2)。

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

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

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

    【讨论】:

      【解决方案2】:

      添加信息:

      我假设一个给定的怪物到塔的距离为 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)。如果此值为负数,则怪物速度太快,在子弹发射之前就到达了塔楼

      【讨论】:

      • 请检查你的第一段 - 首先,phi 是一个速度,后来它是一个角度(phi 应该是角度,omega 角速度)。然后:t=0 是塔开始转动的时间phi(t0) 是起始角度。
      • 进一步 - 我认为你认为所有的怪物都朝着塔的方向前进。这个问题听起来在这个游戏中不是这样的:怪物在棋盘周围移动,塔试图尽快得到它们。
      • 是的,我认为怪物会朝塔走去。但是重写一般怪物运动的方程是可能的。有人感兴趣吗?
      • 我仍然不确定我们是否有一个单一的解决方案或一个解决方案集.. 如果我们有一个集合,那么我们仍然必须找到最好的解决方案(这将是 min(t ))
      • 在不知道确切路径的情况下,只有当塔的角速度和子弹速度远高于怪物的速度时,你才有机会找到合适的时间和角度发射子弹.
      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多