2013-06-17 1 views
1

Я хочу создать приложение (WinForms), состоящее из нескольких панелей. Для каждой панели, я хочу, чтобы иметь возможность назначить файл .dll:Как запускать несколько подключаемых к XNA-игр в одном окне WinForms

example

Эти DLL-файлы должны содержать XNA игры, которые должны быть оказаны в соответствующей панели.

я могу загрузить эти игры с

var game = (Game)Activator.CreateInstance(System.Reflection.Assembly.LoadFrom(path).GetTypes() 
    .First(t => t.IsSubclassOf(typeof(Game)))); 

Теперь я не могу использовать game.Run(), потому что он будет начать второй цикл обработки сообщений.

Запуск новой нити также не выполняется из-за InvalidOperationException s относительно доступа к элементам управления из другого потока.

Уроки, которые я нашел в Интернете, были способны справиться с игрой, которую я пишу сам, и включить ее в основное приложение, но я хочу иметь возможность добавлять другие игры, похожие на плагины.

Как я могу заставить приложение WinForms отображать эти игры XNA, или есть лучшее решение для этого?

ответ

1

Я сделал что-то подобное в прошлом, но я использовал DrawableGameComponents вместо нескольких проектов XNA. Возможно, вы захотите рассмотреть этот маршрут. По сути, вы сможете называть ваши различные функции Draw() все из одного и того же двоичного файла.

Тогда в вашей форме, вы можете создать указатель на Handle панели, которая будет служить в качестве способа, чтобы указать на графический визуализатор, где рисовать сцену:

IntPtr panel1Handle;     
IntPtr panel2Handle; 
IntPtr panel3Handle; 
panel1Handle = Panel1.Handle; 
panel2Handle = Panel2.Handle; 
panel3Handle = Panel3.Handle; 

Тогда в вашем соответствующем DrawableGameComponent .Draw(), установите область, к которой вы собираетесь рисовать, перед выполнением фактического чертежа:

GraphicsDevice.Present(panel1Handle); 
+0

Благодарим вас за предложение. Теперь я создаю эти «DrawableGameComponents» в игре, которую я скрываю потом, и показываю их в панелях на моей форме. – pascalhein

+0

@csharpler Отлично! Рад, что вы его работали. – jgallant

+0

На самом деле, у меня есть еще один вопрос: при запуске игры с несколькими DLL она показывает только первую в каждой панели (а также загружает только первый тип). как я могу загружать разные типы и отображать в каждой панели разные «DrawableGameComponent»? – pascalhein