首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Libgdx皮肤处置行为

Libgdx皮肤处置行为
EN

Stack Overflow用户
提问于 2015-09-27 16:23:09
回答 2查看 380关注 0票数 0

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

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

这里有一个问题:既然我要使用skin.addRegion(),而且关于皮肤类的在线API引用说,“当皮肤被释放时,地图集不会被自动释放”,在全局资产管理器中加载所有的TextureAtlasof皮肤是个好主意吗?

我担心的是处置行动。因为当我调用assetManager.dispose()时,TextureAtlas和皮肤都将在dispose method...but上被调用,如果TextureAtlas在皮肤之前被释放了怎么办?真的会发生什么问题吗?

皮肤行为不是那么明确,我mean...what的处置方法做了吗?

提前感谢,

卢卡

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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()调用,它们彼此一对一地进行镜像。

票数 3
EN

Stack Overflow用户

发布于 2015-09-28 15:32:59

我不想发布一个anwser,但是我不能用代码-_-发布评论。

好的,如果情况如下:

代码语言:javascript
运行
复制
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()来处理所有资源,会不会很好呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32810119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档