C# Monogame - 在启动时传递参数
C# Monogame - passing arguments on startup
所以我想为我的游戏安装一个 winforms GUI...但我似乎找不到经过测试可与 Monogame 一起使用的 GUI 库。这就是为什么我有另一个计划:
- 创建一个 WinForms 项目作为我的游戏的启动。
- 然后,当用户在该项目的主窗体中单击 "Start Game" 时,winforms 项目应该查找我的 Monogame 项目可执行文件并启动它,然后该窗体应该关闭。
- 但是我想将参数从 WinForms exe 传递到 Monogame exe。这样做的目的是在某种程度上阻止用户通过 Monogame exe 启动游戏并改用 Winforms "Starter"。这导致第 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 个项目。我所要做的就是:
- 创建一个新的 MonoGame Windows 项目。
- 向其中添加一个 WinForms 表单 (
Form1
)。
- 编写如下代码..
在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 代码与游戏保持隔离。
所以我想为我的游戏安装一个 winforms GUI...但我似乎找不到经过测试可与 Monogame 一起使用的 GUI 库。这就是为什么我有另一个计划:
- 创建一个 WinForms 项目作为我的游戏的启动。
- 然后,当用户在该项目的主窗体中单击 "Start Game" 时,winforms 项目应该查找我的 Monogame 项目可执行文件并启动它,然后该窗体应该关闭。
- 但是我想将参数从 WinForms exe 传递到 Monogame exe。这样做的目的是在某种程度上阻止用户通过 Monogame exe 启动游戏并改用 Winforms "Starter"。这导致第 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 个项目。我所要做的就是:
- 创建一个新的 MonoGame Windows 项目。
- 向其中添加一个 WinForms 表单 (
Form1
)。 - 编写如下代码..
在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 代码与游戏保持隔离。