如果我在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
的调用已从事件连接之前转移到事件之后。
这并不重要,因为您的代码的两个版本都不正确。它似乎在第一个版本中有效只是好运。请参阅此答案,其中解释了如何正确设置和更改图形设备。