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

时间:2015-08-18 23:56:17

标签: c# .net winforms user-interface monogame

所以我想为我的游戏设置一个winforms GUI ...但是我似乎无法找到经过测试可以使用Monogame的GUI库。这就是我有另一个计划的原因:

  1. 创建一个WinForms项目,作为我游戏的创业公司。
  2. 然后,当用户在该项目的主窗体中单击“开始游戏”时,winforms项目应该查找我的Monogame项目可执行文件并启动它,然后表单应该关闭。
  3. 但是我想将WinForms exe中的参数传递给Monogame exe。这样做的目的是在某种程度上阻止用户通过Monogame exe启动游戏并使用Winforms“Starter”代替。这导致了第4步。
  4. 如果没有参数传递给Monogame项目,它应该关闭。
  5. 我应该像在控制台应用程序中一样,将字符串数组传递给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
    }
    

    你会怎么做?你推荐什么方法?此外,解释的代码示例/想法也很棒!

2 个答案:

答案 0 :(得分:0)

喜欢这个吗?

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

如果你有一个argiment,你将开始你的游戏,否则没有任何反应

答案 1 :(得分:0)

让我们退一步看看你原来的要求。

  

我想为我的游戏设置一个winforms GUI ...当用户点击&#34;开始游戏&#34; [游戏将开始]

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

  1. 创建一个新的MonoGame Windows项目。
  2. 向其添加WinForms表单(Form1)。
  3. 编写以下代码..
  4. 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代码与游戏保持隔离。