仅在XNA中分配某些资源?


13

XNA 4.0中的ContentManager只有一个Unload()方法可以卸载所有资产。

我想拥有一些始终被加载的“全局”资产,但是随后我希望在更改级别时应该卸载的每级资产。

我是否应该创建第二个ContentManager实例作为Level.cs类的一部分?还是我应该使用Game.Content然后调用.Dispose在加载的资产上?还是我应该在这里概述的ReadAsset函数之上创建自己的ContentManager ?

Answers:


12

创建的第二个实例ContentManager

你应该从来没有 Dispose()的东西,你从ContentManager(使用默认的实现)加载,因为这些实例共享和重用。

创建自己的ContentManager版本是正交的。无论哪种方式,您都将创建ContentManager的第二个实例(或从其派生的类)。因此,如果现有实现适合您的目的,请使用它,否则将覆盖您要更改的内容。

当然,如果您的游戏相对较小,那么只使用一个ContentManager而不用费心在各个关卡之间卸载内容就没有关系了。


5
+1并提醒我自己,下次有人试图告诉我资产管理人员的单例模式有多强大时,请在此处链接。

我还在XNA网站上找到了游戏状态管理演示,该演示正好使用了该演示(1个全球内容管理器和2个需要它的屏幕)。不是很直观,但是会做到的:)
Michael Stum
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.