У меня написана простая игра 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, похоже, не работает для меня (говорит «неправильный размер структуры»)
Есть идеи?
Заранее спасибо.