XNA矢量2旋转问题

XNA矢量2旋转问题,xna,rotation,Xna,Rotation,我在玩XNA中的一些东西,我试着围绕小行星移动一个物体,你按左键和右键旋转,上/下键在你指向的方向上前后移动 我已经完成了精灵的旋转,但是我不能让对象沿着你指向它的方向移动,它总是在x=0轴上上上下移动 我猜这是直截了当的,但我就是想不出来。我的“ship”类具有以下值得注意的属性: Vector2 Position float Rotation “ship”类有一个update方法,用于处理输入,到目前为止,我得到了以下结果: public void Update(GameTime game

我在玩XNA中的一些东西,我试着围绕小行星移动一个物体,你按左键和右键旋转,上/下键在你指向的方向上前后移动

我已经完成了精灵的旋转,但是我不能让对象沿着你指向它的方向移动,它总是在x=0轴上上上下移动

我猜这是直截了当的,但我就是想不出来。我的“ship”类具有以下值得注意的属性:

Vector2 Position
float Rotation
“ship”类有一个update方法,用于处理输入,到目前为止,我得到了以下结果:

public void Update(GameTime gameTime)
{
    KeyboardState keyboard = Keyboard.GetState();
    GamePadState gamePad = GamePad.GetState(PlayerIndex.One);

    float x = Position.X;
    float y = Position.Y;

    if (keyboard.IsKeyDown(Keys.Left))  Rotation -= 0.1f;
    if (keyboard.IsKeyDown(Keys.Right)) Rotation += 0.1f;
    if (keyboard.IsKeyDown(Keys.Up))    ??;
    if (keyboard.IsKeyDown(Keys.Down))  ??;

    this.Position = new Vector2(x, y);
}

任何帮助都将不胜感激

我认为一般公式是

X += cos(Angle * PI/180)*Speed
Y += sin(Angle * PI/180)*Speed
以下是一个例子:

 public partial class Form1 : Form
    {
        private float X = 10, Y=10;
        private float Angle = 45f;
        float PI = 3.141f;


        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {           
            X += (float)Math.Cos(Angle * PI / 180.0f)*5f;
            Y += (float)Math.Sin(Angle * PI / 180.0f) * 5f;

            button1.Top = (int)X;
            button1.Left = (int)Y;
        }
    }

好的,我是这样做的(我知道会有一个非trig解决方案!)


我意识到这有点旧,但我还是遇到了它,我想为了完整起见,我应该添加它

而不是使用:

X += (float)Math.Cos(Angle * PI / 180.0f) * 5f;
Y += (float)Math.Sin(Angle * PI / 180.0f) * 5f;
您可以使用:

this.Position.X += (float)(Math.Cos(this.Angle - MathHelper.PiOver2) * 2f);
this.Position.Y += (float)(Math.Sin(this.Angle - MathHelper.PiOver2) * 2f);
不管怎样,这似乎让我向前迈进了


源于(链接第3部分,因为它与前两部分有链接)。

我尝试了以下方法,但现在它似乎只是沿着x轴移动…:S if(keyboard.IsKeyDown(Keys.Up)){x+=(float)Math.Cos(Rotation*Math.PI/180)*5;y+=(float)Math.Sin(Rotation*Math.PI/180)*5;}if(keyboard.IsKeyDown(Keys.Down)(Keys.Down)){x-=(float)Math.Cos(Rotation*Math.PI/180)*5;}。这是更合适的方法,因为它利用了您正在使用的API提供的类库。很高兴听到你解决了这个问题
this.Position.X += (float)(Math.Cos(this.Angle - MathHelper.PiOver2) * 2f);
this.Position.Y += (float)(Math.Sin(this.Angle - MathHelper.PiOver2) * 2f);