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,所以我甚至不确定是否开始狩猎。
如果不清楚,请告诉我,我会尽量详细说明。
我需要知道你如何管理内容…
我想如果你不手动处理纹理,你在某些地方处理内容管理器。
当你用game.Content.Load(asset)加载资源时,内容管理器会保存一个已加载资源的列表,当game. content . dispose()被调用时,内容管理器负责释放这些资源。