我正在为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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需将其添加到您的游戏类绘制调用中:
graphics.GraphicsDevice.Present(displayform.Canvas);
Run Code Online (Sandbox Code Playgroud)
完成绘制到DisplayForm实例后,您可以清除,渲染其他内容,再次调用Present指向另一个画布.
| 归档时间: |
|
| 查看次数: |
3476 次 |
| 最近记录: |