我得到了一些代码来检查玩家是否按下某个键。 当玩家按下空格键时,精灵会上升。 但我正试图在释放钥匙时将精灵设置回地面。 这是我提出的代码:
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;
}
我不希望在没有按空格键时移动精灵。 任何解决方案都会受到高度赞赏吗?
编辑:精灵确实向上移动,但永远不会失效!
答案 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;
}