2011-11-06 78 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()只有当用户在游戏运行时更改设置。