XNA GraphicsDeviceManager.ApplyChanges () вызывает мерцание при вызове при запуске приложения - PullRequest
1 голос
/ 06 ноября 2011

У меня есть функция со следующим кодом:

GameStateManagementGame.GraphicsDeviceManager.PreferredBackBufferWidth = width;
GameStateManagementGame.GraphicsDeviceManager.PreferredBackBufferHeight = height;
GameStateManagementGame.GraphicsDeviceManager.IsFullScreen = isFullScreen;
GameStateManagementGame.GraphicsDeviceManager.ApplyChanges();

При вызове при запуске приложения, если isFullScreen = true, на секунду или 2 очень заметно мерцание экрана, даже если ширинаи высота совпадают с разрешением рабочего стола.Если у меня нет ApplyChanges ();называть это не происходит (но настройки применяются).Если я вызываю функцию после полного запуска игры без вызова ApplyChanges (), настройки не применяются.

Теперь я могу решить эту проблему, добавив что-то, чтобы пропустить вызов ApplyChanges () взапуск, но я хотел бы знать, почему это происходит.

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

Итак, мой вопрос: в чем причина описанного выше поведения и каков лучший обходной путь?

1 Ответ

0 голосов
/ 06 ноября 2011

Установки, установленные на GraphicsDeviceManager, применяются в следующих случаях:

  1. Если вы позвоните ApplyChanges()
  2. Если вы позвоните ToggleFullScreen()
  3. По Game при вызове Game.Run() (создает графическое устройство)

Примечательно, что изменение любой из настроек не приведет к немедленному применению этих настроек.

Вероятная причина вашего мерцания в том, что вы делаете # 3, а затем сразу же делаете # 1 (вы применяете настройки дважды подряд).

Для первоначального запуска вы должны установить правильные настройки для экземпляра GraphicsDeviceManager во время конструктора вашего игрового класса. Тогда эти настройки будут правильными при вызове Game.Run().

Используйте ApplyChanges() только когда пользователь изменяет настройки во время игры.

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