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。