2010-10-28 80 views
0

好的,我有一艘船可以根据轴上下移动,无论船在哪个方向。XNA - 用键盘输入控制物体

如何使船舶朝向它的方向移动?即如果我的船正面朝东,则键向上使其向北而不是向东。

回答

1

你的问题不是很清楚 - 我会假设你正在使用模型和矩阵(而不是SpriteBatch或其他)。所以,猜测 - 我会说你矩阵运算的顺序是不正确的。

This answer对类似的问题可能有帮助。

每个矩阵操作发生在原点周围。因此,如果您在之后做了轮换,您将您的轮船移动到位,您的轮转也将有效地“旋转”运动方向。

0

最简单的方法是使角度和速度可变,因此当您单击左右键时可以更改角度,而当您单击上下方向键时可以改变船舶的速度。

KeyboardState ks; 
    float speed = 0; 
    float angle = 0; 
    protected override void Update(GameTime gameTime) 
    { 
     ks = Keyboard.GetState(); 
     if(ks.IsKeyDown(Keys.Up)) speed += 10; 
     if (ks.IsKeyDown(Keys.Down)) speed -= 10; 
     if (ks.IsKeyDown(Keys.Right)) angle += 10; 
     if (ks.IsKeyDown(Keys.Left)) angle -= 10; 
    } 
0

你需要有方向矢量这样

Vector3 direction = Vector3.Transform(Vector3.Forward, Matrix.CreateFromYawPitchRoll(yaw, pitch, roll)); 

接下来,让你的速度矢量

Vector3 velocity = direction * speed; 

而且移动你的船

float time (float) = gameTime.ElapsedTime.TotalSeconds; 
position += velocity * time; 

在这个例子中偏航角度间距保持0