我有一些简单的移动代码,唯一的问题是对角线移动比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;
}
}
这应该是所有的相关代码,让我知道如果你需要更多。
您可能应该这样做:
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;
我对一夫一妻不太熟悉。但总体方法应该是计算一个移动方向,将其标准化,并将其缩放到适当的速度,这在任何类型的游戏中都是有效的。