Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按一个键会产生很多屏幕_C#_Xna - Fatal编程技术网

C# 按一个键会产生很多屏幕

C# 按一个键会产生很多屏幕,c#,xna,C#,Xna,我的代码如下: else if (keyboardState.IsKeyDown(Keys.E)) // if the 'E' key is pressed { form = new InventoryScreen(); //define winform instance form.Show(); //display winform }

我的代码如下:

        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事件仅在按键时触发一次,而在按住按键时不触发

见:
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();
}
}
旧状态=现在

看起来表单是在条件分支之前定义的,因此如果keyboardState.IsKeyDownKeys.E&&form==null | | |,您可以执行类似于其他操作的操作!form.visible每次单击一次,还是每次会话一次?或者每次按键一次?@Kennythonpson当我按下“E”键时,代码运行一次,这是我的目标你在处理什么事件?是按键还是按键?你应该接受他的回答。另外,请确保您正确地处理了正在创建的子窗体!问题中给出的代码使用XNA函数。XNA没有KeyUp或KeyDown事件。虽然我认为有一种方法可以将XNA游戏类与Windows窗体结合起来,但这不是一种好方法。我猜当他说这个程序会生成很多winform屏幕时,我以为他是在谈论windows窗体。我确实看到上面的代码在XNA中,但他至少在某种程度上使用了winforms。