主类形成类

时间:2013-12-13 13:18:17

标签: c# visual-studio-2010 class text xna

好吧,让我们重新开始,可能没有正确说出来,(不要评判我)所以让我们从头开始。在XNA Game Studio 4.0下,如果存储了模板,我选择了Windows Game(4.0)。我将项目命名为form

加载:

The load up of the game

使用Game1.cs中的代码。现在我右键单击表单,添加,新项目,然后选择窗体。我将表格命名为Form1.cs

现在看起来像这样:

After adding the form what the solution bar look like

然后我添加了一个按钮:

The form with a button in the middle of it

如果我想显示并点击按钮,我必须对Game1.cs做什么才能到达Form1.cs

1 个答案:

答案 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代替。这取决于您对此表单的想法以及您打算如何工作。