XNA SpriteBatch.End()ObjectDisposedException

时间:2011-08-29 20:27:21

标签: c# xna objectdisposedexception

我遇到了抛出异常的一些问题。下面是XNA循环中的draw方法。

protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.White);

        checkInitialization();  // Makes sure that the graphics loader has been initialized
        spriteBatch.Begin();
        GameRunner.CurrentGame.GraphicsSystem.Draw(this.spriteBatch);
        spriteBatch.End();  // Exception is thrown here

        base.Draw(gameTime);
    }

这是图形系统的绘图方法。

public void Draw(SpriteBatch spriteBatch)
    {
        foreach (GraphicsComponent component in this.components)
        {
            component.Draw(spriteBatch, this.texture);
        }
    }

图形组件存储在List<>中。在graphicsSystem中。我认为问题的一部分可能是我在跨项目工作。上面的Top循环是在XNA项目中。第二种绘制方法是在我构建的游戏库中。最后,component.draw()方法的实际实现是在第三个项目中,该项目特定于我正在处理的当前游戏。在构建图形系统时,图形系统中的纹理字段从Content.Load函数初始化。

我尝试了几件不同的事情。我将spritebatch.begin和spritebatch.end移动到图形系统中,这仍然导致异常。当图形系统中的组件列表为空时,不会出现异常。

当范围从一个项目移动到另一个项目时,我不确定加载的纹理是否超出范围,但我不认为这应该是这种情况。我在单个项目中也有相同的设置,但是我重构为多个以便在其他地方使用某些代码。我并没有在纹理消失的地方任何处理,所以我甚至不确定要开始狩猎。

如果不清楚,请告诉我,我会尽力详细说明。

1 个答案:

答案 0 :(得分:0)

我需要知道你如何管理内容...

我想如果你没有手动处理纹理,你就是在某个地方处理内容管理器。

当您使用game.Content.Load(资产)加载资源时,内容管理器会保留已加载资源的列表,并且内容管理器负责在调用game.Cntent.Dispose()时释放它们。