我試過在texture2d上使用dispose函數,但是這導致了問題,我很確定這不是我要使用的。如何從內容管理器中卸載內容?
我應該用什麼來基本卸載內容?內容管理者是否保持自己的追蹤或是否有我需要做的事情?
我試過在texture2d上使用dispose函數,但是這導致了問題,我很確定這不是我要使用的。如何從內容管理器中卸載內容?
我應該用什麼來基本卸載內容?內容管理者是否保持自己的追蹤或是否有我需要做的事情?
ContentManager
「擁有」它加載的所有內容並負責卸載它。您應該卸載ContentManager加載的內容的唯一方法是使用ContentManager.Unload()
(MSDN)。
如果您對ContentManager的此默認行爲不滿意,可以按照this blog post中所述將其替換。
自己創建任何紋理或其他卸載-能資源,而無需通過去ContentManager
應該(通過調用Dispose()
)在Game.UnloadContent
功能配置。
還有一個ContentManager.Unload(bool disposing),它被描述爲卸載託管內容if真正。 xna庫中是否有xna內容類型需要手動處理? – Wouter 2012-04-18 10:30:43
如果要處理紋理,最簡單的方法做到這一點:
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();
}
的[
可能重複如何XNAs Content.Load operations?](http://stackoverflow.com/questions/4242741/how-does-xnas-content-loadtexture2d-operate) –
2010-11-24 10:34:41