提问者:小点点

如何在Monogame中规范我的对角线运动


我有一些简单的移动代码,唯一的问题是对角线移动比X和Y移动快。我知道如何在统一中使之正常化,但不是在一夫一妻制中。

private Vector2 _position;

protected override void Update(GameTime gameTime)
{
     

    if (Keyboard.GetState().IsKeyDown(Keys.W))
    {
        _position.Y -= 1;
    }

    if (Keyboard.GetState().IsKeyDown(Keys.S))
    {
        _position.Y += 1;
    }

    if (Keyboard.GetState().IsKeyDown(Keys.A))
    {
        _position.X -= 1;
    }

    if (Keyboard.GetState().IsKeyDown(Keys.D))
    {
        _position.X += 1;
    }
}

这应该是所有的相关代码,让我知道如果你需要更多。


共1个答案

匿名用户

您可能应该这样做:

var dir = Vector2.Zero;
if (Keyboard.GetState().IsKeyDown(Keys.W))
{
    dir .Y -= 1;
}
// Same for all keys
....

// Ensure the vector has unit length
dir.Normalize(); 
// Define a speed variable for how many units to move
// Should probably also scale the speed with the delta time 
var deltaTime = (float)gameTime.ElapsedGameTime.TotalSeconds;
_position += dir * speed * deltaTime; 

我对一夫一妻不太熟悉。但总体方法应该是计算一个移动方向,将其标准化,并将其缩放到适当的速度,这在任何类型的游戏中都是有效的。