簡體   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