2

可能是相关的。

我在Update方法中有这段代码:

    protected override void Update(GameTime gameTime)
    {
        graphics.PreferredBackBufferWidth = 1024;
        graphics.ApplyChanges();

        base.Update(gameTime);
    }

奇怪的是,在这ApplyChanges行之后,我的LoadContent方法又被调用了。这种情况一遍又一遍地发生。

为什么会发生这种情况,我该如何预防?

4

2 回答 2

0

通常 XNA 应该在您调用 时进行设备重置ApplyChanges,这会执行一系列 DirectX 魔法以确保您的所有纹理等保持加载。(它没有调用LoadContent。)

但是,由于一些不明原因,重置可能会失败。这可能是由于在设备设置期间所做的恶作剧。或者它可能只是一个不稳定的驱动程序或其他东西。或两者。当重置失败时,XNA 会退回到从头开始重新创建设备。

从头开始重新创建设备后,您的所有纹理和其他资源都将完全消失。XNA 现在可以做的最好的事情就是调用你的LoadContent方法,并希望你的游戏编码足够健壮,可以重新加载所有内容并继续。(让你的游戏变得如此强大只是一个适度的努力——它可能不值得。)

没有明智的方法来防止这种行为的发生。我首先建议您ApplyChanges 整理好使用- 这包括不要在每一帧都调用它!- 看看问题是否会消失。

于 2012-12-08T10:05:43.520 回答
0

您提供的链接实际上是相关的,假设为 0。您可以使用您提供的链接上提供的答案graphics.PreferredBackBufferHeight来防止这种情况发生。此外,您应该确保在应用更改之前有一个大于零的值。graphics.PreferredBackBufferHeight

于 2012-12-08T09:19:39.073 回答