0

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

似乎 stackoverflow 上的帖子推荐了一些名为“命令指导”的东西,但不知道这将如何与 2d 游戏一起使用。

所以目前,我很困惑该怎么做。任何方向/指导将不胜感激。

4

3 回答 3

1

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

于 2013-03-05T22:50:31.437 回答
1

听起来您已经有了可以在敌人静止时正确击中敌人的代码,只有在导弹飞行时它们移动的事实才是问题所在。

你为什么不简单地将导弹从当前位置“重新发射”到敌人的新位置,只要敌人迈出一步,或者每 10 个像素左右导弹移动一次。

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

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

于 2013-03-05T23:01:45.980 回答
1

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

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

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

Speed: First calculate the distance between this two points:

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

So the speed of your target is 11.18034 (since you took the observations in an interval equivalent to one time-unit)

Angle: A bit of geometry. The slope of the trajectory is:

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

So the angle is:

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

With two points and the slope, you can estimate the trajectory of your target:

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

All that remains is to calculate the point where your missile can intercept the target. For that you'll need to know the speed of your missile and then calculate the "optimal" interception point. I'll leave you this second step to you. It's simple geometry (and a bit of creativity)

于 2013-03-05T23:14:21.730 回答