您好我正在进行一个项目。我的主要表单是一个表单,每当我点击一个按钮时,monogame程序就会启动。这很有效。
现在我在主窗体中创建了一个方法,我希望将bool传递给monogame格式。
主表单方法:(如果选中复选框,则monogame应绘制天际线)
public bool skyCheck()
{
if (checkBox1.Checked == true)
{
sky = true;
}
else
{
sky = false;
}
return sky;
单一游戏检查:
if (skyCheck() == true)
{
DrawSky();
}
这给了我“当前上下文中不存在'skyCheck'的名称。
答案 0 :(得分:0)
我创建了一个Control,它将monogame嵌入到一个表单中,这样就不必运行单独的程序。你看到的不是普通的嵌入式单一游戏,只能为你提供一个图形设备而且没有更新或游戏方法。这是一个实际的单一游戏嵌入。
这不是问题的根源,但它可以帮助修复它并使您的程序更好。
Here是源代码,自述文件中包含一些简要文档,说明如何使用它
答案 1 :(得分:0)
将表单的引用传递给Game1的构造函数:
public class Game1 : Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
//Change the Form1 to the name of the form class.
Form1 form;
//...
public Game1(Form1 form)
{
this.form = form;
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
//...
// I will assume the DrawSky() should be called in Draw.
protected override void Draw(GameTime gameTime)
{
//...
if (form.skyCheck()) // the "== true" is redundant.
{
DrawSky();
}
//...
}
}
以下代码通常位于Program.cs
中,但是作为Window Forms应用程序,该代码将具有启动游戏的形式:
game = new Game1(this); // where "this" refers to the current form
game.Run();
请注意混合使用Windows窗体和MonoGame的注意事项:
有可能启动另一个线程来运行游戏(从而绕过前两个警告),但是,两个线程之间的所有通信都必须是线程安全的。对于布尔分配和整数分配,保证线程安全(对于32位进程,= <32位,对于64位进程,= <64)。
两个线程都需要退出协调。