1

如果我在方法中设置图形设置,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什么?

4

1 回答 1

0

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

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

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

于 2012-12-04T09:02:36.947 回答