为什么在“加载内容”方法中执行此操作后更改图形设置会失败



如果我在Initialize方法中设置图形设置,然后在Update方法中设置图形设置,如下所示:

protected override void Initialize()
{
    graphics.ApplyChanges();
    base.Initialize();
}
protected override void Update(GameTime gameTime)
{
    graphics.ApplyChanges();
    base.Update(gameTime);
}

一切都很好。

但是,当我将代码移动到我的LoadContent方法时,如下所示:

protected override void LoadContent()
{
    spriteBatch = new SpriteBatch(GraphicsDevice);
    graphics.ApplyChanges();
}
protected override void Update(GameTime gameTime)
{
    graphics.ApplyChanges();
    base.Update(gameTime);
}

我得到一个InvalidOperationException

在调用结束屏幕设备

更改之前必须调用开始屏幕设备更改

这对我来说没有多大意义,因为我在两者中都在做同样的事情。我的理解是,LoadContent方法只是在Initialize方法之后调用的。这些电话之间发生了什么弄乱GraphicsDeviceManager

你弄乱了XNA的一些内部管道。通常,XNA 应该挂接事件以在GameWindow上调用这些方法,当图形设备被创建/销毁时,并正确配对。但是,由于您正在将图形设备更改为不应该在的位置,因此您以某种方式导致它失败。

回答有关您的特定案例的问题:正在发生的事情是base.Initialize()在设置这些事件调用LoadContent。您对ApplyChanges的调用已从事件连接之前转移到事件之后。

这并不重要,因为您的代码的两个版本都不正确。它似乎在第一个版本中有效只是好运。请参阅此答案,其中解释了如何正确设置和更改图形设备。

相关内容

  • 没有找到相关文章

最新更新