为什么在`LoadContent`方法中更改图形设置会失败?

时间:2012-12-04 02:14:58

标签: c# graphics xna xna-4.0

如果我在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的电话之间发生了什么?

1 个答案:

答案 0 :(得分:0)

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

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

并非重要,因为 您的代码的版本都不正确。它似乎在第一个版本中工作只是好运。 请参阅this answer ,其中介绍了如何正确设置和更改图形设备