Libgdx Skin处理行为

时间:2015-09-27 16:23:10

标签: libgdx assets skin

我对libgdx皮肤行为有疑问。 我正在开发的游戏有一个全局的AssetsManager(来自libgdx套件),每个类都可以访问。 我在这个资产管理中加载了不同的TextureAtlas 我知道assetManager.dispose()会处理资产管理器中加载的所有资源。

现在,我还希望在资产管理器中加载一个Skin(用于GUI)。 皮肤会使用几种TextureAtlas ......

这是一个问题:因为我要使用skin.addRegion(),因为关于皮肤类的在线API参考说“皮肤处理时不会自动处理图集”是一个好主意加载全局资产管理器中皮肤的所有TextureAtlas?

我担心处置行为。因为当我调用assetManager.dispose()时,将在dispose方法上调用TextureAtlas和Skin ......但是如果TextureAtlas在皮肤之前被放置怎么办? 实际上可能发生任何问题吗?

皮肤行为的定义不是很明确,我的意思是......处理方法有什么作用?

提前感谢,

卢卡

2 个答案:

答案 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()来处理所有资源,这一切都没问题吗?