【问题标题】:Start a form before launching an XNA Game在启动 XNA 游戏之前创建一个表单
【发布时间】:2017-02-20 17:16:10
【问题描述】:

因此,我创建了一个带有浏览器的表单,用于访问我游戏网站上的“新闻”页面。它有 2 个按钮:“开始游戏”和“关卡编辑器”。

我目前正在使用DialogResult 来检查是否点击了这些按钮中的任何一个 - “开始游戏”有DialogResult = Yes,而“关卡编辑器”有DialogResult = No。是的,这是一个丑陋的解决方案,但我无法使其与 Application.Run(newsForm); 一起使用,因为我不知道如何检查 newsForm 类之外的按钮点击。

我的 XNA 项目的 Program.cs:

[STAThread]
private static void Main()
{
    Application.EnableVisualStyles();
    using (var newsForm = new NewsForm())
    {
        if (newsForm.ShowDialog() == DialogResult.Yes)
        {
            using (var game = new Game1())
            {
                game.Run();
            }
            newsForm.Dispose();
        }
        else if (newsForm.ShowDialog() == DialogResult.No)
        {
            using (var editor = new EditorForm())
            {
                Application.Run(editor);
                newsForm.Dispose();
            }
        }
    }
}

在我的NewsForm 设计器中,我将按钮的DialogResult 属性设置为适当的值。但我还有一个问题:

当我点击“开始游戏”时,XNA 表单正确显示,NewsForm 关闭。但是当我点击“关卡编辑器”时,表单看起来像是关闭然后重新打开......我必须再次点击该按钮才能启动editor 表单。如果我点击“开始游戏”,它就会关闭。我确定这是由DialogResult 引起的。

正如我上面所说,我这样做的方式在设计方面绝对不是正确的,因为:

  1. 这是一个表单,而不是一个对话框
  2. 这些按钮并不意味着 DialogResult 或用户期望它们的意思

因此,如果您知道我如何实现上述我所描述的,无论是否使用ShowDialog,我将不胜感激。

【问题讨论】:

    标签: c# winforms xna


    【解决方案1】:

    使用switch() 代替if()

    [STAThread]
    private static void Main()
    {
        Application.EnableVisualStyles();
        using (var newsForm = new NewsForm())
        {
            DialogResult dr = newsForm.ShowDialog();
            switch (dr)
            {
                case DialogResult.Yes:
                    using (var game = new Game1())
                    {
                        game.Run();
                        newsForm.Close();
                        newsForm.Dispose(); // since you open the form with ShowDialog(), you must dispose of it manually.
                    }
                    break;
                case DialogResult.No:
                    using (var editor = new EditorForm())
                    {
                        Application.Run(editor);
                        newsForm.Close();
                        newsForm.Dispose(); // since you open the form with ShowDialog(), you must dispose of it manually.
                    }
                    break;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多