gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:15:15 25 4
gpt4 key购买 nike

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

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

提前致谢。

最佳答案

我已经做了一些类似于你正在尝试做的事情。您需要做的就是告诉图形设备在哪里显示您渲染的“内容”。您可以通过将指向 Canvas 的指针传递给它来完成此操作。

这是一个示例表单类:

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 以指向另一个 Canvas 。

关于c# - [C#][XNA 3.1] 如何在一个 Windows 窗体中托管两个不同的 XNA 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com