[C #] [XNA 3.1] Как разместить два разных окна XNA в одной форме Windows? - PullRequest
7 голосов
/ 15 марта 2010

Я делаю Редактор карт для 2D-игры на основе плиток. Я хотел бы разместить два элемента управления XNA внутри формы Windows - первый для отображения карты; второй для рендеринга тайла. Я использовал код здесь , чтобы сделать управляющий хост XNA внутри формы Windows. Все это работает очень хорошо - до тех пор, пока внутри формы Windows есть только один элемент управления XNA. Но мне нужно два - один для карты; второй для тайла. Как запустить два элемента управления XNA в форме Windows? Во время поиска в Google я наткнулся на термины «цепочка обмена» и «несколько областей просмотра», но я не могу их понять и был бы признателен за поддержку.

Как примечание, я знаю, что пример элемента управления XNA был разработан таким образом, что даже если вы запустили 100 элементов управления XNA, все они будут использовать один и тот же GraphicsDevice - по сути, все 100 элементов управления XNA будут иметь один и тот же экран. Я попытался изменить код для создания нового GraphicsDevice для каждого элемента управления XNA, но остальная часть кода не работает. Код немного длинный, поэтому я не буду его публиковать, если кому-то не понадобится, чтобы он мне помог.

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 15 марта 2010

Я сделал нечто похожее на то, что вы пытаетесь сделать. Все, что вам нужно сделать, это сообщить графическому устройству, где представить «материал», который вы визуализировали. Вы делаете это, передавая указатель на холст.

Вот пример формы класса:

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, указывая на другой холст.

2 голосов
/ 24 марта 2010

Вам могут пригодиться эти два образца XNA:

http://creators.xna.com/en-US/sample/winforms_series1

http://creators.xna.com/en-US/sample/winforms_series2

1 голос
/ 19 мая 2010

Всего лишь мысль, но не задумывались ли вы над тем, чтобы сделать это приложение MDI-приложением?

таким образом, вы можете загрузить форму, которая содержит 1 экземпляр xna несколько раз.

В противном случае ... делай то, что предлагает РодЯн:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...