我有以下代码:
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'键,窗口会消失?
答案 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;