2010-11-24 21 views
9

Intenté usar la función de eliminación en texture2d pero eso causó problemas y estoy bastante seguro de que no es lo que debo usar.¿Cómo descargo contenido del administrador de contenido?

¿Qué debo usar para descargar básicamente el contenido? ¿El administrador de contenido se sigue o hay algo que tengo que hacer?

+0

posible duplicado de [¿de qué manera los XNA Content.Load opera?] (Http://stackoverflow.com/questions/4242741/how-does-xnas-content-loadtexture2d-operate) –

Respuesta

12

Eche un vistazo a mis respuestas here y posiblemente here.

El ContentManager "posee" todo el contenido que carga y es responsable de descargarlo. La única forma en que debe descargar el contenido cargado por ContentManager es usando ContentManager.Unload() (MSDN).

Si no está satisfecho con este comportamiento predeterminado de ContentManager, puede reemplazarlo como se describe en this blog post.

Cualquier texturas u otros recursos unload-poder que usted mismo crea sin pasar por ContentManager deberán eliminarse (llamando Dispose()) en su función Game.UnloadContent.

+0

También hay una ContentManager.Unload (bool disposing) que también se describe como la descarga de contenido administrado si cierto. ¿Hay tipos de contenido xna en la biblioteca xna que se administran y necesitan eliminación manual? – Wouter

+1

@Wouter Unload no toma un argumento en ninguna versión que veo en MSDN. Es posible que esté mirando 'Dispose (bool disposing)' (que es un método protegido, no puede llamar externamente). Esto es parte del patrón desechable C# estándar ([explicado aquí] (http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx)). 'Dispose (true)' se llama durante la eliminación estándar (la instrucción 'using' o llamando directamente a 'Dispose()') y llamará a 'Descargue()'. 'Dispose (false)' es llamado por el finalizador y específicamente no llama a 'Unload' (no puede acceder a otros objetos, ya pueden haber sido finalizados). –

1

Si desea deshacerse de una textura, la forma más fácil de hacerlo:

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

Si desea deshacerse de todos los contenidos después de salir del juego, la mejor manera de hacerlo:

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

Si desea deshacerse única textura después de salir del juego:

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