Как избежать игрового цикла в XNA 4.0 - PullRequest
4 голосов
/ 10 января 2012

Я разрабатывал простую программу просмотра 3D-моделей на XNA 4.0.Есть ли способ избежать бесконечного игрового цикла с функциями Draw и Update?Мне нужно визуализировать трехмерную графику, но без бесконечного рендеринга сцены.Я имею в виду, мне нужно перерисовать сцену только тогда, когда она действительно изменилась.

Ответы [ 4 ]

4 голосов
/ 10 января 2012

Предлагаю взглянуть на то, как они это делают в своих примерах:

App Hub - WinForms Series 1
App Hub - WinForms Series 2

2 голосов
/ 10 января 2012

Почему именно ты этого хочешь?

Если вы используете приложение winforms, у вас больше контроля над циклом обновления и рисования, но вы также можете сначала визуализировать сцену в текстуру, а затем вообще прекратить рендеринг.

1 голос
/ 10 января 2012

Этот сценарий лучше всего решить, используя WinForms или WPF в качестве хоста для вашей системы рендеринга. Я работал с такими системами ранее, и я обнаружил, что использование SlimDX с WPF Interop было моим предпочтительным решением. Использование этого подхода позволяет добавить приятные функции пользовательского интерфейса, предоставляемые WPF, накладываемые на трехмерную модель, отображаемую на поверхности.

1 голос
/ 10 января 2012

Вам придется свернуть свой собственный многопоточный цикл;если вы остановитесь либо Update, либо Draw, другой тоже будет остановлен.Другое соображение заключается в том, что если ваше окно каким-либо образом затенено (в средах, отличных от DWM; например, с перекрывающим его окном), остановка Draw оставит области вашего окна неокрашенными.этот;то, что вы будете делать, - это запускать Thread при первом вызове Update и затем использовать ManualResetEvent для синхронизации двух.

Гораздо более надежный вариант - визуализировать всю сцену в RenderTarget2D когда сцена обновляется;если сцена не была изменена с момента последнего вызова Update или Draw, просто визуализируйте RenderTarget2D вместо всей сцены.Это все еще бесконечный цикл, но он стремится к вашему требованию (даже если он не соответствует ему).

...