Как выгрузить контент из менеджера контента? - PullRequest
9 голосов
/ 24 ноября 2010

Я пытался использовать функцию dispose на texture2d, но это вызывало проблемы, и я уверен, что это не то, что я должен использовать.

Что я должен использовать для выгрузки контента? Отслеживает ли менеджер контента сам или мне нужно что-то делать?

Ответы [ 2 ]

12 голосов
/ 24 ноября 2010

Посмотрите мои ответы здесь и, возможно, здесь .

ContentManager "владеет" всем содержимым, которое загружается, и отвечает за выгрузкуЭто.Единственный способ выгрузить контент, загруженный ContentManager, это использовать ContentManager.Unload() ( MSDN ).

Если вас не устраивает такое поведение ContentManager по умолчанию, вы можете заменить егокак описано в этом сообщении в блоге .

Любые текстуры или другие незагружаемые ресурсы, которые вы создаете сами без прохождения ContentManager, должны быть удалены (путем вызова Dispose()) в вашей функции Game.UnloadContent.

1 голос
/ 12 апреля 2012

Если вы хотите удалить текстуру, самый простой способ сделать это:

    SpriteBatch spriteBatch;
    Texture2D texture;
    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        texture = Content.Load<Texture2D>(@"Textures\Brick00");
    }
    protected override void Update(GameTime gameTime)
    {
        // Logic which disposes texture, it may be different.
        if (Keyboard.GetState().IsKeyDown(Keys.D))
        {
            texture.Dispose();
        }

        base.Update(gameTime);
    }
    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap, DepthStencilState.None, RasterizerState.CullCounterClockwise, null);

        // Here you should check, was it disposed.
        if (!texture.IsDisposed)
            spriteBatch.Draw(texture, new Vector2(resolution.Width / 2, resolution.Height / 2), null, Color.White, 0, Vector2.Zero, 0.25f, SpriteEffects.None, 0);

        spriteBatch.End();
        base.Draw(gameTime);
    }

Если вы хотите удалить весь контент после выхода из игры, лучший способ сделать это:

    protected override void UnloadContent()
    {
        Content.Unload();
    }

Если вы хотите удалить только текстуру после выхода из игры:

    protected override void UnloadContent()
    {
        texture.Dispose();
    }
...