XNA SpriteBatch.End () ObjectDisposedException - PullRequest
0 голосов
/ 30 августа 2011

У меня возникли проблемы с брошенным исключением.Ниже приведен метод рисования из цикла 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);
        }
    }

Графические компоненты хранятся в Списке <> в graphicsSystem.Я думаю, что частью проблемы может быть то, что я работаю над проектами.Верхний цикл выше в проекте XNA.Второй метод рисования находится в созданной мной игровой библиотеке.И, наконец, фактическая реализация метода component.draw () находится в третьем проекте, специфичном для текущей игры, над которой я работаю.поле текстуры в графической системе инициализируется из функции Content.Load при построении графической системы.

Я пробовал пару разных вещей.Я переместил spritebatch.begin и spritebatch.end в графическую систему, что все равно привело к исключению.Исключение не появляется, когда список компонентов в графической системе пуст.

Я не уверен, выходит ли загруженная текстура из области видимости, когда область перемещается из одного проекта в другой, но я не думаю, что это должно быть так.У меня также была такая же установка в одном проекте, который работал, однако я реорганизовал несколько объектов, чтобы использовать некоторый код в другом месте.Я не призываю утилизировать где-либо текстуру, которая исчезает, поэтому я даже не уверен, что начну охоту.

Если это не ясно, дайте мне знать, и я постараюсь уточнить.

1 Ответ

0 голосов
/ 30 августа 2011

Мне нужно знать, как вы управляете контентом ...

Полагаю, если вы не утилизируете текстуры вручную, вы в некоторых местах утилизируете Менеджер контента.Когда вы загружаете ресурсы с помощью game.Content.Load (asset), менеджер контента сохраняет список загруженных ресурсов, а менеджер контента отвечает за их освобождение при вызове game.Cntent.Dispose ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...