2011-11-06 50 views
0

我在它與下面的代碼功能時:XNA GraphicsDeviceManager.ApplyChanges()產生閃爍在應用程序調用啓動

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

當它被稱爲在應用程序啓動,如果isFullScreen = TRUE,有非常顯着即使寬度和高度與桌面分辨率相同,屏幕閃爍一秒或2秒。如果我沒有ApplyChanges();調用這個不會發生(但設置確實會被應用)。如果在沒有ApplyChanges()調用的情況下完全啓動遊戲後調用該函數,則不會應用這些設置。

現在我可以通過將東西跳過ApplyChanges()在啓動時調用解決這個問題,但我想知道爲什麼發生這種情況。

我設法找到了關於這個問題的唯一信息說,如果你正在使用相同的分辨率的桌面或提供了過於複雜和破碎的解決方法閃爍不應該發生。

所以我的問題是什麼是上述行爲的原因和什麼是最好的解決方法?

回答

1

GraphicsDeviceManager設定的內容,在這些情況下適用:

  1. 如果你打電話ApplyChanges()
  2. 如果你打電話ToggleFullScreen()
  3. 通過GameGame.Run()被稱爲(它創建的圖形設備)

Noteably,修改任何的設置將不是導致這些設置立即應用。

可能的原因爲你閃爍的是,你正在做的#3,然後立即做#1(你兩次申請設置成一排)。

對於初始啓動,您應在遊戲類的構造函數中設置的GraphicsDeviceManager實例正確的設置。那麼調用Game.Run()時這些設置將是正確的。

使用ApplyChanges()只有當用戶在遊戲運行時更改設置。

相關問題