【问题标题】:XNA C# Dispose() ContentXNA C# Dispose() 内容
【发布时间】:2014-06-17 17:27:18
【问题描述】:

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

我在管理器类中创建了一个 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() 上收到错误消息,因为我重新加载了纹理。我该怎么办?

【问题讨论】:

    标签: c# xna


    【解决方案1】:

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

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

    【讨论】:

    • 但是我Out of Memory的问题一直都在这里。 :s 当我在故事模式中加载新纹理并查看使用的内存时,它会越来越大。玩家在第三关的时候,用了1000Mo的内存……真是个问题!当有人在玩我的视频游戏时,我不希望他的电脑崩溃..! >
    • 你能告诉我在 Update() 中使用 Load.C​​ontent 代替 LoadContent() (在 Game1 中)是否有问题?在这种情况下,内容管理员是否也能够管理内容的生命周期? (我指出每个纹理只加载一次,如我所愿)。
    • 我建议您仔细阅读此问题的公认答案:stackoverflow.com/questions/4264995/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多