XNA SpriteBatch.End() ObjectDisposedException
У меня возникли проблемы с брошенным исключением. Ниже приведен метод рисования из цикла XNA.
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. Я думаю, что часть проблемы может заключаться в том, что я работаю над проектами. Верхний цикл выше в проекте XNA. Второй метод рисования находится в созданной мной игровой библиотеке. И, наконец, фактическая реализация метода component.draw() находится в третьем проекте, специфичном для текущей игры, над которой я работаю. поле текстуры в графической системе инициализируется из функции Content.Load при построении графической системы.
Я пробовал пару разных вещей. Я переместил spritebatch.begin и spritebatch.end в графическую систему, что все равно привело к исключению. Исключение не появляется, когда список компонентов в графической системе пуст.
Я не уверен, выходит ли загруженная текстура из области видимости, когда область перемещается из одного проекта в другой, но я не думаю, что это должно быть так. У меня также была такая же установка в одном проекте, который работал, однако я реорганизовал несколько, чтобы использовать некоторый код в другом месте. Я не призываю утилизировать где-либо текстуру, которая исчезает, поэтому я даже не уверен, что начну охоту.
Если это не ясно, дайте мне знать, и я постараюсь уточнить.
1 ответ
Мне нужно знать, как вы управляете контентом...
Я полагаю, если вы не утилизируете текстуры вручную, вы в некоторых местах используете Менеджер контента.
Когда вы загружаете ресурсы с помощью game.Content.Load(asset), менеджер контента сохраняет список загруженных ресурсов, а менеджер контента отвечает за их освобождение при вызове game.Cntent.Dispose().