2014-08-29 43 views
0

我得到了一些代码来检查玩家是否按下了某个键。 当玩家按下空格键时,精灵会上升。 但是我试图找出在释放按键时将精灵设置回地面。 这是我想出了代码:我不想当不按下空格键即可移动精灵检查按下后是否释放了一个键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; 
} 

。 任何解决方案将不胜感激?

编辑:精灵确实向上移动,但从未落下!

+0

在第二个else中,如果您要检查Space键是否关闭,然后检查Space键是否打开,则永远不会出现这种情况。 – Measuring 2014-08-29 16:41:05

回答

2

您在空格键上检查了IsKeyUp中的一个子句,只有当空格键关闭时才会进入该子句!

摆脱所有冗余else语句,并做重点了一个额外的检查停靠玩家移动,如果它击中地面,所以像:

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; 
} 
4

你可以存储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 

而且应该解决。