在应用程序启动时调用GraphicsDeviceManager.ApplyChanges()会导致闪烁

本文关键字:闪烁 ApplyChanges 启动 应用程序 调用 GraphicsDeviceManager | 更新日期: 2023-09-27 18:13:49

我有一个函数,其中包含以下代码:

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

当它在应用程序启动时被调用时,如果isFullScreen = true,即使宽度和高度与桌面分辨率相同,也会有非常明显的屏幕闪烁一秒或两秒。如果我没有ApplyChanges();调用这不会发生(但设置确实得到应用)。如果我在游戏完全开始后调用该函数而没有调用ApplyChanges(),则设置不会被应用。

现在我可以通过在启动时跳过ApplyChanges()调用来解决这个问题,但我想知道为什么会发生这种情况。

关于这个问题,我找到的唯一信息是,如果你使用与桌面相同的分辨率,或者提供了过于复杂和破碎的解决方案,那么闪烁不应该发生。

所以我的问题是上面描述的行为的原因是什么,最好的解决办法是什么?

在应用程序启动时调用GraphicsDeviceManager.ApplyChanges()会导致闪烁

您在GraphicsDeviceManager上设置的设置适用于以下情况:

  1. 如果您呼叫ApplyChanges()
  2. 呼叫ToggleFullScreen()
  3. Game.Run()被调用时Game(它创建图形设备)

值得注意的是,修改任何设置都不会导致立即应用这些设置。

你闪烁的可能原因是你正在做#3,然后马上做#1(你连续两次应用设置)。

对于初始启动,您应该在游戏类的构造函数中设置GraphicsDeviceManager实例的正确设置。当调用Game.Run()时,这些设置将是正确的。

仅当用户在游戏运行时更改设置时使用ApplyChanges()