按一个键会产生很多屏幕

时间:2013-12-17 02:38:53

标签: c# xna

我有以下代码:

        else if (keyboardState.IsKeyDown(Keys.E)) // if the 'E' key is pressed
        {
            form = new InventoryScreen();         //define winform instance
            form.Show();                          //display winform
        }

它有效,也许太好了。因为当用户按下并按住“E”键时,程序会生成很多的winform屏幕。有没有办法指示程序只运行以下一次?另外,我怎么写它以便如果我再次按下'E'键,窗口会消失?

2 个答案:

答案 0 :(得分:0)

我会在keyup上创建一个单独的事件处理程序。在处理程序中,您可以检查密钥是否确实是“E”。键盘事件只会在按下键时触发一次,而在键按下时不会触发。

请参阅: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown(v=vs.110).aspx

答案 1 :(得分:0)

XNA不是事件驱动的,而是游戏循环。

没有内置事件会在按键被触发时触发。一种选择是仅在没有创建表单的情况下处理'E'事件。

第二个选项是保持旧的键盘状态,如下所示:

KeyboardState oldState;

更新(..):

KeyboardState now = Keyboard.GetState();
if (now.IsKeyUp(Keys.E) && oldState.IsKeyDown(Keys.E))
// i.e. a "release event"
{
  form.Show();
}
oldState = now;

对于消失的变体,这可能有效或类似,但您可能应该以创建的形式处理它:

KeyboardState now = Keyboard.GetState();
if (now.IsKeyUp(Keys.E) && oldState.IsKeyDown(Keys.E))
// i.e. a "release event"
{
  if (form.Visible)
  {
   form.Hide();
  } 
 else 
{
  form.Show();
}

}     oldState = now;