更改图形设置调用`LoadContent`

时间:2012-12-08 07:34:04

标签: c# graphics xna xna-4.0

This可能是相关的。

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

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

        base.Update(gameTime);
    }

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

正常情况下,当您调用ApplyChanges时,XNA应该执行设备重置,它会执行一系列DirectX魔法以确保所有纹理等都保持加载状态。 (它不会调用LoadContent。)

然而,由于一些不明原因,重置可能会失败。这可能是由于设备设置期间shenanigans you're doing造成的。或者它可能只是一个片状的驱动程序或其他东西。或两者。当重置失败时,XNA会从头开始重新创建设备。

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

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