按下一个键会产生很多屏幕
本文关键字:屏幕 下一个 | 更新日期: 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=现在;