XNA-使用键盘输入控制对象

XNA-使用键盘输入控制对象,xna,Xna,好的,我有一条船,它根据轴上下移动,不管船面对的是什么 我如何使船朝着它所面对的方向移动?i、 e.如果我的船是朝东的,基普会让它向北而不是向东。你的问题不是很清楚-我假设你使用的是模型和矩阵(而不是SpriteBatch或其他东西)。所以,做一个猜测-我想说你的矩阵运算的顺序是不正确的 回答一个类似的问题可能会有所帮助 每个矩阵运算都围绕原点进行。因此,如果你在将船移动到位后进行旋转,你的旋转也将有效地“旋转”移动方向。最简单的方法是使角度和速度可变,这样当你左右单击时,你可以改变角度,当你上

好的,我有一条船,它根据轴上下移动,不管船面对的是什么


我如何使船朝着它所面对的方向移动?i、 e.如果我的船是朝东的,基普会让它向北而不是向东。

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

回答一个类似的问题可能会有所帮助


每个矩阵运算都围绕原点进行。因此,如果你在将船移动到位后进行旋转,你的旋转也将有效地“旋转”移动方向。

最简单的方法是使角度和速度可变,这样当你左右单击时,你可以改变角度,当你上下单击时,你可以改变船的速度

    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;
    }

你需要有这样的方向向量

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