C# XNA是否将密钥设置为已释放?

C# XNA是否将密钥设置为已释放?,c#,input,xna,keyboard,C#,Input,Xna,Keyboard,我正在用XNA写一个简单的游戏,你可以用WSAD移动一个精灵。问题是,如果同时按下两个方向相同的键,移动将取消,角色不会移动。是否可以手动将钥匙设置为释放以避免此情况?以下是按键移动代码: if (newKeyState.IsKeyDown(Keys.W)) { position.Y -= vel; } if (newKeyState.IsKeyDown(Keys.S)) { position.Y += vel; } if (newKeyState.IsKeyDown(Key

我正在用XNA写一个简单的游戏,你可以用WSAD移动一个精灵。问题是,如果同时按下两个方向相同的键,移动将取消,角色不会移动。是否可以手动将钥匙设置为释放以避免此情况?以下是按键移动代码:

if (newKeyState.IsKeyDown(Keys.W))
{
     position.Y -= vel;
}
if (newKeyState.IsKeyDown(Keys.S))
{
     position.Y += vel;
}
if (newKeyState.IsKeyDown(Keys.A))
{
     position.X -= vel;
}
if (newKeyState.IsKeyDown(Keys.D))
{
     position.X += vel;
}
是否可以手动将钥匙设置为释放以避免此情况

没有。但是,如果需要,可以将其更改为else。在这种情况下,如果按W和S,则只有W会计数。您可以通过更改首先检查的键来更改此设置

if (newKeyState.IsKeyDown(Keys.W)) {
     position.Y -= vel;
} else if (newKeyState.IsKeyDown(Keys.S)) {
     position.Y += vel;
} else if (newKeyState.IsKeyDown(Keys.A)) {
     position.X -= vel;
} else if (newKeyState.IsKeyDown(Keys.D)) {
     position.X += vel;
}
如果您只想在每个轴上只移动一个方向

if (newKeyState.IsKeyDown(Keys.W)) {
     position.Y -= vel;
} else if (newKeyState.IsKeyDown(Keys.S)) {
     position.Y += vel;
} 

if (newKeyState.IsKeyDown(Keys.A)) {
     position.X -= vel;
} else if (newKeyState.IsKeyDown(Keys.D)) {
     position.X += vel;
}
按键状态(
newKeyState
在上面的代码中)表示键盘的实际物理状态,因此当用户仍按住按键时,既不可能也不希望将按键状态设置为释放。但是,有一些替代方案可以让您实现预期的最终结果:

1) 你可以重组你的代码,例如

if(newKeyState.IsKeyDown(Keys.W))
{
    position.Y -= vel;
}
else if(newKeyState.IsKeyDown(Keys.S))
{
    position.Y += vel;
}
// etc.
2) 您可以维护自己的状态(即
newKeyState
的缓存版本),并将密钥设置为在该状态下释放