我编写了一个简单的XNA演示,其中一个精灵应该沿着一条线(用两个Vector2点(Ax,Ay)和(Bx,By)定义)以给定的速度V移动(理解为距离上的距离)以单位时间行走的路线)。 我知道我需要使用类似这些的公式计算2D空间中的x和y位置:
dx = V*dt*cos(alpha)
dy = V*dt*sin(alpha)
但考虑负V(例如“向后移动”时) 但是我想知道我是不是要重新发明轮子,也许xna可以提供解决方案吗?
答案 0 :(得分:4)
通过从B中减去A来创建从A点到B点的2D矢量。通过将X和Y分数除以矢量的长度来归一化它。将X和Y分量乘以速度。将其乘以时间片(即20/1000,持续20毫秒)。将这些X和Y值添加到您的位置。
示例:
A is (2, 5) B is (1, 8)
Speed is 2 (move 2 units in one second)
Time slice is 20 milliseconds since last update
C will be (-1, 3)
Normalize C by dividing by distance (sqrt(-1 * -1 + 3 * 3) = 3.1622777)
Normalized is (-0.316277, 0.9486833) (to move 1 unit that direction)
Multiply by speed (2): (-0.632554, 1.8973666)
For movement this time period, multiply by 20 and divide by 1000:
(-0.01265108, 0.037947332), move sprite this far this frame