我对libgdx皮肤行为有疑问。 我正在开发的游戏有一个全局的AssetsManager(来自libgdx套件),每个类都可以访问。 我在这个资产管理中加载了不同的TextureAtlas 我知道assetManager.dispose()会处理资产管理器中加载的所有资源。
现在,我还希望在资产管理器中加载一个Skin(用于GUI)。 皮肤会使用几种TextureAtlas ......
这是一个问题:因为我要使用skin.addRegion(),因为关于皮肤类的在线API参考说“皮肤处理时不会自动处理图集”是一个好主意加载全局资产管理器中皮肤的所有TextureAtlas?
我担心处置行为。因为当我调用assetManager.dispose()时,将在dispose方法上调用TextureAtlas和Skin ......但是如果TextureAtlas在皮肤之前被放置怎么办? 实际上可能发生任何问题吗?
皮肤行为的定义不是很明确,我的意思是......处理方法有什么作用?
提前感谢,
卢卡
答案 0 :(得分:3)
skin.dispose()
调用处理Disposable
的任何特定资源。但是TextureAtlas本身并不是其中的资源之一。因此必须与皮肤分开手动处理。
我能想到的一次性皮肤资源的唯一例子是BitmapFont,它不使用你在皮肤上使用的TextureAtlas。
请注意,永远不要在使用AssetManager加载的内容上调用dispose
。相反,您应该在该资源上调用manager.unload()
,以便AssetManager可以正确地管理依赖项。
关于manager.unload()
的好处是,它跟踪有多少其他资源依赖于对象,并且只有在没有依赖关系时才处理它。因此,如果您还使用AssetManager加载Skin,则只需要担心调用manager.unload("mySkin")
,它将正确地确定是否也应该处理关联的TextureAtlas。
但是,每次在同一资源上调用unload()
时,请确保只对资源调用一次load()
。 AssetManager的内部依赖计数确实依赖于您的所有load()
和unload()
调用互相镜像。
答案 1 :(得分:0)
我不想发布anwser,但我无法使用代码-_-发表评论。
好的,如果下面的情况如下: `
assetManager.load("images/guiTextureAtlas", TextureAtlas.class);
assetsManager.load("skin/uiSkin.json", Skin.class)";
assetsManager.finishLoading();
Skin uiSkin = assetManager.get("skin/uiSkin.json");
uiSkin.addRegion(assetManager.get("images/guiTextureAtlas");
`
如果我调用assetManager.dispose()来处理所有资源,这一切都没问题吗?