按下一个键会产生很多屏幕

本文关键字:屏幕 下一个 | 更新日期: 2024-10-20 01:18:29

我有下面的代码:

        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"键,窗口将消失,我该如何写?

按下一个键会产生很多屏幕

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

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

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=现在;