- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为基于图 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/
我是一名优秀的程序员,十分优秀!