在我的游戏中,我希望我的塔在子弹到达敌人时射击敌人将要到达的地方。
我不希望我的子弹弯曲,我希望它根据单位移动的速度和移动方向直接射击到估计的位置
我的想法是,我通过每次移动时从它的最后位置减去它的当前位置来确定我的敌人的方向。所以可以说它的方向是(1,1)
在那之后,我不是 100% 确定我需要做什么逻辑。
我在想我需要知道从塔到敌人的距离,以确定我需要估计子弹应该到达它时敌人将有多远的时间。
我真的不知道从哪里开始,所以如果有人可以给我一些关于我应该如何处理这个解决方案的指示。
在我的游戏中,我希望我的塔在子弹到达敌人时射击敌人将要到达的地方。
我不希望我的子弹弯曲,我希望它根据单位移动的速度和移动方向直接射击到估计的位置
我的想法是,我通过每次移动时从它的最后位置减去它的当前位置来确定我的敌人的方向。所以可以说它的方向是(1,1)
在那之后,我不是 100% 确定我需要做什么逻辑。
我在想我需要知道从塔到敌人的距离,以确定我需要估计子弹应该到达它时敌人将有多远的时间。
我真的不知道从哪里开始,所以如果有人可以给我一些关于我应该如何处理这个解决方案的指示。
假设,你敌人的位置向量是P
,他的速度是E
,你的子弹速度是b
。[我将使用大写字母作为向量,并使用其对应的小写字母作为其模数]
假设,一段时间后t
敌人会被击中。
然后,t*B = P + t*E
[B
子弹的速度在哪里。注意,你不知道 的方向B
,但你知道它的 mod 值,b
]
现在尝试计算t
!我想这并不容易,还有一个未知数, 的方向向量B
。您必须将其替换为已知变量,t
然后求解 if for t
。使用其他矢量工具,例如点积来获得 和 之间的角度P
,B
获得其他方程和其他矢量之间的关系。
更新:
我只是做了一些简短的计算,我可能错了。让我知道这是否有效。
t
是以下方程的实正解:
t^2*(e^2-b^2) + t*(2*p*e*cos(the angle between P and E)) + p^2 = 0
在匀加速直线运动的情况下
x(t) = x0 + vx * t
y(t) = y0 + vy * t
其中vx
,vy
是速度v
在坐标轴上的投影。速度是矢量,标量值是速度,方向是运动方向。在您的情况下,如果您的方向向量已标准化,请将其乘以速度以获得速度。
你知道起始位置:(x0, y0)
。您只需要投影vx
和vy
. 如果w
是 x 轴和速度之间的角度,则
vx = v * cos(w)
vy = v * sin(w)
至于角度:使用atan2f
函数,或 cocos2d 函数ccpToAngle
(使用atan2f
自身)和归一化方向向量。