在`LoadContent`方法不能这样做后为什么改变图形设置?(Why does changing

2019-10-17 11:22发布

如果我在设定的图形设置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

Answer 1:

你搞乱了一些XNA的内部管道的。 正常情况下应该XNA挂钩活动,以呼吁这些方法GameWindow创建图形设备时/被毁,正确配对。 但是,因为你改变的地方图形设备,你不应该,你不知何故导致它失败。

要回答这个问题,您的具体情况:正在发生的事情是, base.Initialize()调用LoadContent它已成立了这些事件之后 。 你调用ApplyChanges已经从之前的事件来连线一下,后移动。

这不是问题,因为无论是版本的代码是正确的 。 这似乎在第一个版本的工作仅仅是运气好。 请看这个答案 ,这也解释了如何设置和正确更改图形设备。



文章来源: Why does changing the graphics setting after doing so in the `LoadContent` method fail?