XNA C#Dispose()内容

时间:2014-06-17 17:27:19

标签: c# xna

我正在使用XNA(C#)进行2D格斗游戏。在我添加故事模式之前,我的游戏中一切都很顺利。有超过60帧。我有一个变量,每次人按空格键时其值都会改变。 我想在不再需要屏幕时尝试游戏状态转换和dispose()(或.Unload())内容。我搜索了Dispose()Unload ()以节省占用纹理的内存,但是在为它调用Dispose()之后我无法为变量Texture2D赋值。 (texture.IsDisposed = true)。

我在Manager类中创建了一个ContentManager xContent。

 Texture2D texture;
 int image = 0;
 ____________________

 if (Keyboard.GetState().IsKeyDown(Keys.Space))
 {
     if (image == 0)
     {
         texture = Manager.xContent.Load<Texture2D>("texture1");
     }
     else if (image == 1)
     {
         texture.Dispose();
         texture = Manager.xContent.Load<Texture2D>("texture2");
     }
 }

画画:

spriteBatch.Begin();
...
spriteBatch.End();

我收到上述粘贴的spriteBatch.End()错误,因为我重新加载了纹理。我该怎么办?

2 个答案:

答案 0 :(得分:2)

您不应该致电&#39; Dispose()&#39;在 XNA内容管理器加载的内容的任何上。内容管理员将管理内容的生命周期(毕竟,这是他们的工作)。它应该根据使用情况做出关于何时加载/卸载特定纹理的合理决定。

当处理内容管理器本身时,它将处理它当前管理的所有内容,因此您不需要处理单个内​​容。

答案 1 :(得分:0)

尝试在经理内部组织它。根据需要将适当的纹理加载到集合中并使用它们并在它们变得不真正需要时删除。如果纹理不会链接它,迟早会拿起垃圾收集器。