XNA设置密钥发布?

时间:2012-04-03 18:49:40

标签: 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(Keys.A))
{
     position.X -= vel;
}
if (newKeyState.IsKeyDown(Keys.D))
{
     position.X += vel;
}

2 个答案:

答案 0 :(得分:1)

  

是否可以手动设置要释放的密钥以避免这种情况?

不。但是,您可以将其更改为else-if。在这种情况下,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;
}

答案 1 :(得分:1)

键状态(上面代码中的newKeyState)表示键盘的实际物理状态,因此当用户仍然按住键时,设置键的状态既不可能也不可取。但是,有一些替代方案可以让您达到预期的最终结果:

1)您可以重新构建代码,例如

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

2)您可以维护自己的状态(即newKeyState的缓存版本)并设置要在其中释放的密钥。