我有个问题关于libgdx皮肤行为。我正在开发的游戏有一个全局AssetsManager (来自libgdx套件),每个类都可以访问。我在这个资产管理中加载了不同的TextureAtlas,我知道assetManager.dispose()处理了资产管理器中加载的所有资源。
现在,我还希望在资产管理器中加载一个皮肤(用于GUI)。皮肤要用几个TextureAtlas.
这里有一个问题:既然我要使用skin.addRegion(),而且关于皮肤类的在线API引用说,“当皮肤被释放时,地图集不会被自动释放”,在全局资产管理器中加载所有的TextureAtlasof皮肤是个好主意吗?
我担心的是处置行动。因为当我调用assetManager.dispose()时,TextureAtlas和皮肤都将在dispose method...but上被调用,如果TextureAtlas在皮肤之前被释放了怎么办?真的会发生什么问题吗?
皮肤行为不是那么明确,我mean...what的处置方法做了吗?
提前感谢,
卢卡
发布于 2015-09-28 14:07:25
skin.dispose()
调用对任何属于Disposable
的特定资源进行处理。但是TextureAtlas本身并不是“资源”之一,所以它必须与皮肤分开手动处理。
我能想到的一次性皮肤资源的唯一例子是一个BitmapFont,它不使用与皮肤一起使用的TextureAtlas。
请注意,您不应该在加载了dispose
的东西上调用AssetManager。相反,您应该对该资源调用manager.unload()
,以便AssetManager能够正确地管理依赖项。
manager.unload()
的好处是,它跟踪有多少其他资源依赖于对象,并且只有在没有依赖关系时才对其进行处理。因此,如果您还使用AssetManager加载皮肤,您只需要担心调用manager.unload("mySkin")
,它将正确地确定是否也应该释放关联的TextureAtlas。
但是,确保每次调用同一资源上的unload()
时,只对资源调用一次load()
。AssetManager的内部依赖项计数确实依赖于您的所有load()
和unload()
调用,它们彼此一对一地进行镜像。
发布于 2015-09-28 15:32:59
我不想发布一个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()来处理所有资源,会不会很好呢?
https://stackoverflow.com/questions/32810119
复制相似问题