如果我在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
:
必须在调用EndScreenDeviceChange
之前调用BeginScreenDeviceChange
这对我来说没有多大意义,因为我在两者中做同样的事情。据我所知,LoadContent
方法只是在Initialize
方法之后调用。那些扰乱GraphicsDeviceManager
的电话之间发生了什么?
答案 0 :(得分:0)
你搞乱了XNA的一些内部管道。通常,当创建/销毁图形设备时,XNA应该挂起事件以在GameWindow
上调用这些方法,并进行正确的配对。但是,因为您正在将图形设备更改为您不应该的地方,所以它会以某种方式导致它失败。
要回答有关您具体案例的问题:发生的事情是base.Initialize()
在设置了这些事件之后调用LoadContent
。您对ApplyChanges
的调用已经从事件连接之前转移到之后。
并非重要,因为 您的代码的版本都不正确。它似乎在第一个版本中工作只是好运。 请参阅this answer ,其中介绍了如何正确设置和更改图形设备 。