如何从Monogame中的WindowsForms调用方法?

问题描述 投票:0回答:2

您好我正在进行一个项目。我的主要表单是一个表单,每当我点击一个按钮时,monogame程序就会启动。这有效。

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

主表单方法:(如果选中复选框,则monogame应绘制天际线)

public bool skyCheck()
    {
        if (checkBox1.Checked == true)
        {
            sky = true;                
        }
        else
        {
            sky = false;
        }
        return sky;

单字游戏检查:

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

这给了我'skyCheck'的名称在当前上下文中不存在。

winforms methods monogame
2个回答
0
投票

我创建了一个控件,它将一个单一格式嵌入到一个表单中,这样就不必运行单独的程序。你看到的不是普通的嵌入式单一游戏,只能为你提供一个图形设备而且没有更新或游戏方法。这是一个实际的单一游戏嵌入。

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

Here是源代码,自述文件中包含一些简要文档,介绍如何使用它


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的注意事项:

  1. 表单的消息泵和游戏在同一个线程中运行。表格上的任何失速都会导致游戏滞后。
  2. 将会有性能损失。
  3. 确保游戏在卸载表单之前正常关闭,以确保正确清理资源。

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

需要两个线程中的退出协调。

© www.soinside.com 2019 - 2024. All rights reserved.