按下C#XNA后检查是否释放了一个键

时间:2014-08-29 16:03:04

标签: c# xna

我得到了一些代码来检查玩家是否按下某个键。 当玩家按下空格键时,精灵会上升。 但我正试图在释放钥匙时将精灵设置回地面。 这是我提出的代码:

keystate = Keyboard.GetState();
if (keystate.IsKeyDown(Keys.Right))
     playerPosition.X += 2.0f;
else if (keystate.IsKeyDown(Keys.Left))
     playerPosition.X -= 2.0f;
else if (keystate.IsKeyDown(Keys.Space))
{
   if (keystate.IsKeyDown(Keys.Space))
       playerPosition.Y -= 6.0f;
   else if (keystate.IsKeyUp(Keys.Space))
        playerPosition.Y += 6.0f;
}

我不希望在没有按空格键时移动精灵。 任何解决方案都会受到高度赞赏吗?

编辑:精灵确实向上移动,但永远不会失效!

2 个答案:

答案 0 :(得分:5)

您可以存储oldstate

KeyboardState newState = Keyboard.GetState();  // get the newest state

// handle the input
if(newState.IsKeyDown(Keys.Space) && oldState.IsKeyUp(Keys.Space))
{
    playerPosition.Y += 6.0f;
}
if(newState.IsKeyUp(Keys.Space) && oldState.IsKeyDown(Keys.Space))
{
    playerPosition.Y -= 6.0f;
}

oldState = newState;  // set the new state as the old state for next time

这应该可以解决。

答案 1 :(得分:2)

您在空格键上检查了IsKeyUp,只有在空格键停止时才会输入该子句!

摆脱所有多余的其他声明,并对Key Up进行额外检查,以阻止玩家在地面上移动,如下所示:

keystate = Keyboard.GetState();

if (keystate.IsKeyDown(Keys.Space) && playerPosition.Y >= MinYPos)
{
       playerPosition.Y -= 6.0f;
}

if (keystate.IsKeyUp(Keys.Space) && playerPosition.Y <= MaxYPos)
{
        playerPosition.Y += 6.0f;
}