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

时间:2010-10-28 13:17:25

标签: xna

好的,所以我有一艘船根据轴向上和向下移动,无论船在哪里。

如何使船舶朝向其面向的方向移动?也就是说,如果我的船朝向东方,那么钥匙就会向北而不是向东移动。

3 个答案:

答案 0 :(得分:1)

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

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

每个矩阵操作都发生在原点周围。因此,如果您在之后进行旋转,则将船舶移动到位,您的旋转也将有效地“旋转”移动方向。

答案 1 :(得分: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;
    }

答案 2 :(得分: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.