我目前正在编制塔防,导弹往往会错过敌人,而不是跟他们一样,就像他们在台式塔防御中那样。这是因为他们在没有给敌人任何领先的情况下射击,所以当它到达敌人的位置时,敌人已经有3-5个像素的距离。我查看了如何解决这个问题,并发现我需要使用矢量数学来解决问题。例如,这个网站http://www.helixsoft.nl/articles/circle/sincos.htm有一些关于如何编程寻的导弹的代码,但我不确定这是否是我需要解决问题的数学类型。
似乎stackoverflow上的帖子推荐了一些名为“命令指导”的内容,但不知道这对于2D游戏有什么用。
所以此刻,我很担心该怎么做。任何方向/指导都将非常感激。
答案 0 :(得分:1)
那篇文章正是你所需要的,请阅读有关寻的导弹的部分,并使用反正切函数。
答案 1 :(得分:1)
听起来你已经拥有能够正确击中敌人的代码,如果它们是静止的,只有他们在导弹飞行时移动的事实才是问题。
为什么不在敌人迈出一步,或每10个像素左右导弹移动时,将导弹从当前位置“重新启动”到敌人的新位置。
这将导致导弹在飞行中“归巢”敌人,而不是预测导弹到达时敌人的位置。
不同之处在于,“归位”每次都会导致命中,而预测方法将允许敌人在导弹飞行时通过切换行走方向来躲避导弹。你更喜欢哪一个是设计决定,但我认为通常的塔防游戏使用归位方法。
答案 2 :(得分:1)
你需要“预测”敌人的方向。假设它沿直线移动,塔需要观察它的目标的速度和方向。
假设您的塔位于(0,0)点并且您收集了两个目标的观察值:
t=0
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
剩下的就是计算导弹可以拦截目标的点。为此,您需要知道导弹的速度,然后计算“最佳”拦截点。我会告诉你第二步。这是简单的几何(和一点创造力)