Вопрос

I am having some issues with a thrown exception. Below is the draw method from the XNA loop.

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);
    }

And here is the draw method from the graphics system.

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

The graphics components are stored in a List<> in the graphicsSystem. I am thinking that part of the issue may be that I a working across projects. The Top loop above is in an XNA project. The second draw method is in a game library I constructed. And finally the actual implementation of the component.draw() method is in a third project that is specific to the current game I am working on. the texture field in the graphics system is initalized from the Content.Load function upon construction of the graphics system.

I have tried a couple different things. I moved the spritebatch.begin and spritebatch.end into the graphics system, which still resulted in the exception. The exception does not appear when the components list in the graphics system is empty.

I am not sure if the loaded texture is going out of scope when the scope moves from one project to another, but I don't think this should be the case. I have also had the same sort of setup in a single project that worked, however I was refactoring into multiple to make some use of some of the code elsewhere. I am not calling dispose anywhere on the texture that is disappearing, so I am not even really sure to begin hunting.

If this isn't clear, let me know and I will try to elaborate.

Это было полезно?

Решение

I'd need to know how do you manage content...

I suppose if you are not disposing manually the textures, you are disposing the Content Manager in some place.

When you load assets with game.Content.Load(asset), the content manager keeps a list of the resources loaded, and the content manager is responsible to free them when game.Cntent.Dispose() is called.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top