好吧,让我们重新开始,可能没有正确说出来,(不要评判我)所以让我们从头开始。在XNA Game Studio 4.0下,如果存储了模板,我选择了Windows Game(4.0)。我将项目命名为form
。
加载:
使用Game1.cs
中的代码。现在我右键单击表单,添加,新项目,然后选择窗体。我将表格命名为Form1.cs
。
现在看起来像这样:
然后我添加了一个按钮:
如果我想显示并点击按钮,我必须对Game1.cs
做什么才能到达Form1.cs
?
答案 0 :(得分:0)
您可以通过多种方式执行此操作。处理此问题的显而易见的地方是游戏的Update
方法(请注意样板代码为您留下的TODO评论):
// TODO: Add your update logic here
if (Keyboard.GetState().IsKeyDown(Keys.F1))
{
Form1 form1 = new Form1();
form1.ShowDialog();
}
上面的代码会检查每次更新是否按下F1
,如果是,它会创建并显示表单。我在这里使用了ShowDialog
因为我猜这个表单会用来修改设置等,你会希望它保持在最顶层。
现在,如果你使用上面的代码,你很快就会发现问题 - 一直在调用XNA游戏的Update
方法。即使快速点击键也会最终创建几个新窗口并显示它们,因此您需要实现一些互锁进入表单的方法。一种简单的方法是在Game1.cs
private bool isForm1Open = false;
然后在Update
方法中:
if (Keyboard.GetState().IsKeyDown(Keys.F1) && (!isForm1Open))
{
isForm1Open = true;
Form1 form1 = new Form1();
form1.FormClosed += new System.Windows.Forms.FormClosedEventHandler(
(s, e) => { isForm1Open = false; } );
form1.ShowDialog();
}
这会在form1
附加一个匿名事件处理程序,以便在关闭时重置isForm1Open
。这可以保证表单只打开一次。在任何情况下,显示表单都与您通常所做的相同 - 创建一个表单并显示它。当然,还有其他方法可以解决这个问题 - 您可能希望将Form1
实现为单例类,或者只是将副本保留在内存中并使用show / hide代替。这取决于您对此表单的想法以及您打算如何工作。