[C#] [XNA 3.1], Как я могу разместить два различных окна XNA в одном Windows Form?

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

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

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

7
задан user293575 14 March 2010 в 21:43
поделиться

3 ответа

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

Вот образец класса формы:

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

6
ответ дан 7 December 2019 в 03:14
поделиться

Вы можете найти эти два примера XNA полезными:

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

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

2
ответ дан 7 December 2019 в 03:14
поделиться

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

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

Если это не удастся ... сделайте то, что предлагает Родян :)

1
ответ дан 7 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: