如何正确编程导弹寻路?

时间:2013-03-05 22:36:05

标签: java

我目前正在编制塔防,导弹往往会错过敌人,而不是跟他们一样,就像他们在台式塔防御中那样。这是因为他们在没有给敌人任何领先的情况下射击,所以当它到达敌人的位置时,敌人已经有3-5个像素的距离。我查看了如何解决这个问题,并发现我需要使用矢量数学来解决问题。例如,这个网站http://www.helixsoft.nl/articles/circle/sincos.htm有一些关于如何编程寻的导弹的代码,但我不确定这是否是我需要解决问题的数学类型。

似乎stackoverflow上的帖子推荐了一些名为“命令指导”的内容,但不知道这对于2D游戏有什么用。

所以此刻,我很担心该怎么做。任何方向/指导都将非常感激。

3 个答案:

答案 0 :(得分:1)

那篇文章正是你所需要的,请阅读有关寻的导弹的部分,并使用反正切函数。

答案 1 :(得分:1)

听起来你已经拥有能够正确击中敌人的代码,如果它们是静止的,只有他们在导弹飞行时移动的事实才是问题。

为什么不在敌人迈出一步,或每10个像素左右导弹移动时,将导弹从当前位置“重新启动”到敌人的新位置。

这将导致导弹在飞行中“归巢”敌人,而不是预测导弹到达时敌人的位置。

不同之处在于,“归位”每次都会导致命中,而预测方法将允许敌人在导弹飞行时通过切换行走方向来躲避导弹。你更喜欢哪一个是设计决定,但我认为通常的塔防游戏使用归位方法。

答案 2 :(得分:1)

你需要“预测”敌人的方向。假设它沿直线移动,需要观察它的目标的速度和方向。

假设您的塔位于(0,0)点并且您收集了两个目标的观察值:

  • (100,100)t=0
  • (90,95)t=1

速度:首先计算这两点之间的距离:

 d = sqrt((x2-x1)^2 + (y2 - y1)^2) =
   = sqrt(10^2 + 5^2) = sqrt(125) = 11.18034

所以目标的速度是11.18034(因为你以相当于一个时间单位的间隔进行了观察)

角度:有点几何。轨迹的斜率是:

 m = (y2 - y1) / (x2 - x1) =
   = 5 / 10 = 0.5

所以角度是:

 theta = arctan(0.5) = 0.463648 radians (or 26.56 degrees)

有两个点和斜率,您可以估计目标的轨迹:

 y - y1 = m * (x - x1)
 ==> y = 0.5 * (x - 100) + 100 =
       = 0.5 * x + 50

剩下的就是计算导弹可以拦截目标的点。为此,您需要知道导弹的速度,然后计算“最佳”拦截点。我会告诉你第二步。这是简单的几何(和一点创造力)