Windows формы и XNA - Draw не в режиме реального времени - PullRequest
1 голос
/ 09 ноября 2010

В настоящее время я работаю над редактором уровней для XNA, который создается путем объединения Windows Forms и XNA.Я использую материал из примера в App Hub текст ссылки , но я внес некоторые изменения, поэтому у меня есть некоторый класс ViewportController, который управляет всеми элементами управления окном просмотра, а не форма управляет ими напрямую.Проблема в том, что когда мне нужно обновить метод Draw, я должен встряхнуть окно.Кто-нибудь знает, как это исправить, чтобы ничья обновлялась в реальном времени?

1 Ответ

2 голосов
/ 09 ноября 2010

Не уверен, что может быть ViewportController. Однако метод Draw () запускается запросом рисования Windows. При этом запускается метод Control.OnPaint (), для него есть переопределение в классе GraphicsDeviceControl, что приводит к запуску Draw ().

В примере SpinningTriangleControl показано, как получить элемент управления для многократного перерисовывания, что нужно для его анимации:

        // Hook the idle event to constantly redraw our animation.
        Application.Idle += delegate { Invalidate(); };

Обратите внимание на вызов метода Control.Invalidate (), это то, что в конечном итоге приводит к запуску метода OnPaint (). Использование события Idle гарантирует, что это будет выполняться снова и снова, но только если основной поток не занят чем-либо другим. Это не обязательно для элементов управления, которые показывают только статическое содержимое, например, образец SpriteFontControl. Другой способ сделать это - использовать Timer с коротким интервалом, его обработчик событий Tick может вызывать Invalidate ().

...