Winforms 如何在Monogame中从WindowsForms调用方法?

Winforms 如何在Monogame中从WindowsForms调用方法?,winforms,methods,monogame,Winforms,Methods,Monogame,嗨,我现在正在做一个项目。我的主窗体是一个窗体,每当我点击一个按钮,monogame程序就会启动。这很有效 现在我在主窗体中创建了一个方法,我想把bool传递给monogame窗体 主要形式方法:(如果复选框被选中,单游戏应该画一条天际线) 单一游戏检查: if (skyCheck() == true) { DrawSky(); } 这给了我一个名称“skyCheck”在当前上下文中不存在。我制作了一个控件,将单游戏嵌入表单中,这样就不必

嗨,我现在正在做一个项目。我的主窗体是一个窗体,每当我点击一个按钮,monogame程序就会启动。这很有效

现在我在主窗体中创建了一个方法,我想把bool传递给monogame窗体

主要形式方法:(如果复选框被选中,单游戏应该画一条天际线)

单一游戏检查:

if (skyCheck() == true)
        {
            DrawSky();
        }

这给了我一个名称“skyCheck”在当前上下文中不存在。

我制作了一个控件,将单游戏嵌入表单中,这样就不必运行单独的程序。它不是你所看到的普通嵌入式游戏,它只给你一个图形设备,没有更新或游戏方法。这是一个真正的嵌入游戏

这不是问题的根源,但它可以帮助您解决问题,并使您的程序更好


是源代码,自述文件中包含一些关于如何使用它的简要文档

将表单的引用传递给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
中,但作为窗口窗体应用程序,此代码将以启动游戏的形式出现:

game = new Game1(this); // where "this" refers to the current form
game.Run();
请注意混合Windows窗体和MonoGame的注意事项:

  • 表单的消息泵和游戏在同一线程中运行。表格上的任何停顿都会导致游戏延迟
  • 将有一个性能罚款
  • 请确保在卸载窗体之前游戏已正确关闭,以确保资源已正确清理

  • 可以启动另一个线程让游戏运行(从而绕过前两个警告),但是,两个线程之间的所有通信必须是线程安全的。布尔赋值和整数赋值(32位进程小于32位,64位进程小于64位)保证了线程安全


    两个线程都需要退出协调。

    您发布的代码与您的问题无关。听起来好像您正在尝试使用skyCheck()的另一个类中声明skyCheck()。你需要提供更多的信息,你希望有人帮助你。
    game = new Game1(this); // where "this" refers to the current form
    game.Run();