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