我已经尝试Math.Atan2(futurePos.Y - pos.Y, futurePos.X - pos.X)
作为旋转,但它似乎只在 X 轴上工作。
而如果我这样做Math.Atan2(mouse.Y - pos.Y, mouse.X - pos.X)
它就可以正常工作(尽管我必须管理速度是否为负值,即使这对两个方向都不起作用)。
(futurePos = position + velocity)
我在这里期望的结果是在粒子的位置上绘制一个矩形,其长度与粒子的速度有关,其角度指向粒子的去向。
请记住,如果您的参考系是"经典"参考系,则在XNA中Y轴是相反的,因此您必须否定您作为第一个参数输入的所有内容Math.Atan2
仅供参考,我最终画了一条从对象到其未来位置的线(正如我的问题中所预期的那样)。
下面是 Draw 方法中的代码;
Vector2 nextPos = position + velocity * 7;
drawLine(spriteBatch, Game1.pixelTexture, position, nextPos, Color.FromNonPremultiplied(255, 0, 0, 100));
这是绘制线代码;
void drawLine(SpriteBatch spa, Texture2D tex, Vector2 src, Vector2 dst, Color col)
{
Vector2 direction = dst - src;
var angle = (float)Math.Atan2(direction.Y, direction.X);
float distance;
Vector2.Distance(ref src, ref dst, out distance);
spa.Draw(tex, src, new Rectangle((int)src.X, (int)src.Y, (int)distance, 2), col, angle, Vector2.Zero, 1.0f, SpriteEffects.None, 0f);
}