This可能是相关的。
我在Update
方法中有这段代码:
protected override void Update(GameTime gameTime)
{
graphics.PreferredBackBufferWidth = 1024;
graphics.ApplyChanges();
base.Update(gameTime);
}
奇怪的是,在ApplyChanges
行之后,我的LoadContent
方法再次被调用。这种情况一再发生。
为什么会发生这种情况,我该如何预防呢?
答案 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 - 包括不在每一帧都调用它! - 看看问题是否消失了。