XNA SpriteBatch.End() ObjectDisposedException

本文关键字:ObjectDisposedException End SpriteBatch XNA | 更新日期: 2023-09-27 18:07:02

我遇到了抛出异常的一些问题。下面是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);
        }
    }

图形组件存储在graphicsSystem中的List<>中。我在想,部分问题可能是我在跨项目工作。上面的Top循环位于XNA项目中。第二个绘制方法是在我构建的游戏库中。最后,component.draw()方法的实际执行是在第三个项目中,该项目是针对我正在开发的当前游戏的。图形系统中的纹理字段是从内容中初始化的。构建图形系统时的加载功能。

我已经尝试了一些不同的事情。我移动了spritebatch。开始并spritebatch。结束进入图形系统,这仍然导致了异常。当图形系统中的组件列表为空时,不出现异常。

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

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

XNA SpriteBatch.End() ObjectDisposedException

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

我想如果你不手动处理纹理,你在某些地方处理内容管理器。

当你用game.Content.Load(asset)加载资源时,内容管理器会保存一个已加载资源的列表,当game. content . dispose()被调用时,内容管理器负责释放这些资源。

相关文章:
  • 没有找到相关文章