[英][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.