繁体   English   中英

[C#] [XNA 3.1]如何在一个Windows窗体中托管两个不同的XNA窗口?

[英][C#][XNA 3.1] How can I host two different XNA windows inside one Windows Form?

我正在为2D基于图块的游戏制作地图编辑器。 我想在Windows窗体中托管两个XNA控件 - 第一个渲染地图; 第二个渲染tileset。 我在这里使用代码 Windows窗体中创建XNA控件主机。 这一切都很好 - 只要Windows窗体中只有一个XNA控件。 但我需要两个 - 一个用于地图; tileset的第二个。 如何在Windows窗体中运行两个XNA控件? 谷歌搜索时,我遇到了“交换链”和“多个视口”这两个术语,但我无法理解它们并希望得到支持。

正如旁注,我知道XNA控件示例的设计使得即使您运行100个XNA控件,它们也将共享相同的GraphicsDevice - 实质上,所有100个XNA控件都将共享同一个屏幕。 我尝试修改代码以为每个XNA控件实例化一个新的GraphicsDevice,但其余的代码不起作用。 代码有点长,所以我不会发布它,除非有人需要它能够帮助我。

提前致谢。

我做了类似于你想要做的事情。 您需要做的就是告诉图形设备在哪里展示您渲染的“东西”。 你通过传递一个指向画布的指针来做到这一点。

这是一个示例表单类:

public class DisplayForm : Form
{

    IntPtr canvas;
    Panel displaypanel;

    public Panel DisplayPanel
    {
        get { return displaypanel; }
        set { displaypanel = value; }
    }

    public IntPtr Canvas
    {
        get { return canvas; }
        set { canvas = value; }
    }

    public DisplayForm()
    {
        displaypanel = new Panel();
        displaypanel.Dock = DockStyle.Fill;

        this.canvas = displaypanel.Handle;
        this.Controls.Add(displaypanel);
    }

}

然后只需将其添加到您的游戏类绘制调用中:

graphics.GraphicsDevice.Present(displayform.Canvas);

完成绘制到DisplayForm实例后,您可以清除,渲染其他内容,再次调用Present指向另一个画布。

只是一个想法,但你考虑过让你的这个应用程序成为MDI应用程序吗?

这样你就可以多次加载一个包含xna实例的表单。

失败了...做RodYan建议:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM