Встраивание игры XNA в пользовательский элемент управления формы Windows - PullRequest
3 голосов
/ 05 января 2012

У меня написана простая игра XNA 4.0. Я хочу создать пользовательский элемент управления Windows Form, который будет отображать эту игру и обеспечивать обратную связь (клавиатура и мышь) в XNA.

Я пробовал следующее:

В XNA:

  • Перенаправить XNA's Game.GraphicsDevice на RenderTarget2D.

  • Создает событие, отправляющее объект с помощью KeyboardState и MouseState для заполнения Windows Forms, в начале функции Update ()

В WinForms:

  • Захватите событие, заполнив KeyboardState и MouseState данными, полученными обычными событиями клавиатуры и мыши в Windows Forms.

  • На OnPaint вызовите Game.RunOnFrame ()

  • Получить RenderTarget2D из игры (в качестве текстуры).

  • Заблокируйте данные текстуры и попробуйте раскрасить их попиксельно в графике моего пользовательского элемента управления.

  • Другая идея состояла в том, чтобы просто вызвать Game.Run () (o новый поток) и создать событие в Game, отправив RenderTarget2D.

Я обнаружил следующие проблемы:

  • Если я вызываю Game.Run (), у меня нет возможности скрыть окно игры (которое выглядит черным, потому что я перенаправляю рендер)

  • Game.Run () должен быть вызван в другом потоке, потому что он запускает новый цикл событий (он вызывает методы приложения), а затем я рисую в своем пользовательском элементе управления из другого потока, в котором он был создан (плохо, плохо)

  • Блокировка RenderTarget2D с помощью Color, Vector4 и даже Rgba32, похоже, не работает для меня (говорит «неправильный размер структуры»)

Есть идеи?

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

1 Ответ

5 голосов
/ 06 января 2012

На сайте xna есть отличный пример кода о встраивании xna в winform. Он проведет вас через все шаги. Я делаю игры для xbox, но я использую это для редактора уровней, который мы сделали для нашего движка.

http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1

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