C# Monogame - 在启动时传递参数

C# Monogame - passing arguments on startup

所以我想为我的游戏安装一个 winforms GUI...但我似乎找不到经过测试可与 Monogame 一起使用的 GUI 库。这就是为什么我有另一个计划:

  1. 创建一个 WinForms 项目作为我的游戏的启动。
  2. 然后,当用户在该项目的主窗体中单击 "Start Game" 时,winforms 项目应该查找我的 Monogame 项目可执行文件并启动它,然后该窗体应该关闭。
  3. 但是我想将参数从 WinForms exe 传递到 Monogame exe。这样做的目的是在某种程度上阻止用户通过 Monogame exe 启动游戏并改用 Winforms "Starter"。这导致第 4 步。
  4. 如果没有参数传递给 Monogame 项目,它应该关闭。

所以我应该像在控制台应用程序中那样做,像这样将字符串数组传递给 Monogame 应用程序的主要空隙:

using System;

namespace myGame
{
#if WINDOWS || LINUX
    /// <summary>
    /// The main class.
    /// </summary>
    public static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            using (var game = new Game1())
                game.Run();
            if (args[0] != "startFromWinForms")
            {
                // Find a way to close or
                // on the other hand I think
                // it will throw an exception??
            }
        }
    }
#endif
}

你会怎么做?你推荐什么方法?代码 examples/ideas 解释也很棒!

像这样?

    [STAThread]
    static void Main(string[] args)
    {
        if (args[0] == "startFromWinForms")
        {
            using (var game = new Game1())
                game.Run();
        }
    }

如果你有争论,你将开始你的游戏,否则什么也不会发生

让我们退后一步,看看您的原始需求。

I want to have a winforms GUI for my game ... when the user clicks "Start Game" [the game will start]

我刚刚尝试了一个简单的解决方案,我认为它可以解决您的问题而无需 创建 2 个项目。我所要做的就是:

  1. 创建一个新的 MonoGame Windows 项目。
  2. 向其中添加一个 WinForms 表单 (Form1)。
  3. 编写如下代码..

Main()方法中:

    [STAThread]
    static void Main()
    {
        var form = new Form1();

        if (form.ShowDialog() == DialogResult.OK)
        {
            using (var game = new Game1())
                game.Run();
        }
    }

并且在Form1按钮点击事件中:

    private void StartGameButton_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.OK;
    }

就是这样。您不需要在命令行上传递任何内容。您将只有 1 个 exe,它满足所有要求。 MonoGame 的工作方式与现在完全一样,WinForms 代码与游戏保持隔离。