Libgdx 皮肤处置行为
Libgdx Skin dispose behavior
我有一个关于 libgdx 皮肤行为的问题。
我正在开发的游戏有一个全局 AssetsManager(来自 libgdx 套件),每个 class 都可以访问。
我在此资产管理中加载了不同的 TextureAtlas
我知道 assetManager.dispose() 处理资产管理器中加载的所有资源。
现在,我还想在资产管理器中加载皮肤(用于 GUI)。
皮肤将使用多个TextureAtlas...
问题是:因为我要使用 skin.addRegion() 并且在线 API 关于皮肤的参考资料 class 说 "The atlas will not be automatically disposed when the skin is disposed" 是不是很好在全局资源管理器中加载皮肤的所有 TextureAtlas 的想法?
我担心处理操作。因为当我调用 assetManager.dispose() 时,TextureAtlas 和 Skin 都会在 dispose 方法上被调用...但是如果 TextureAtlas 在皮肤之前被处理怎么办?
真的会发生什么问题吗?
皮肤行为不是很明确,我的意思是...dispose 方法有什么作用?
提前致谢,
卢卡
skin.dispose()
调用处置 Disposable
的任何特定资源。但是 TextureAtlas 本身不是其中之一 "resources" 所以它必须与皮肤分开手动处理。
我能想到的一次性皮肤资源的唯一示例是不使用您与皮肤一起使用的 TextureAtlas 的 BitmapFont。
请注意,永远不要对使用 AssetManager 加载的内容调用 dispose
。相反,您应该对该资源调用 manager.unload()
,以便 AssetManager 可以正确管理依赖项。
manager.unload()
的好处在于它会跟踪有多少其他资源依赖于该对象,并且仅在清除依赖项时才释放它。因此,如果您还使用 AssetManager 加载皮肤,则只需担心调用 manager.unload("mySkin")
,它会正确确定是否也应处理关联的 TextureAtlas。
但是请确保每次对同一资源调用 load()
时只对资源调用一次 unload()
。 AssetManager 的内部依赖计数确实依赖于您所有的 load()
和 unload()
调用一对一地相互镜像。
我不想 post 回复,但我无法 post 使用代码 -_- 发表评论。
好的,如果情况如下:
`
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()处理所有资源可以吗?
我有一个关于 libgdx 皮肤行为的问题。 我正在开发的游戏有一个全局 AssetsManager(来自 libgdx 套件),每个 class 都可以访问。 我在此资产管理中加载了不同的 TextureAtlas 我知道 assetManager.dispose() 处理资产管理器中加载的所有资源。
现在,我还想在资产管理器中加载皮肤(用于 GUI)。 皮肤将使用多个TextureAtlas...
问题是:因为我要使用 skin.addRegion() 并且在线 API 关于皮肤的参考资料 class 说 "The atlas will not be automatically disposed when the skin is disposed" 是不是很好在全局资源管理器中加载皮肤的所有 TextureAtlas 的想法?
我担心处理操作。因为当我调用 assetManager.dispose() 时,TextureAtlas 和 Skin 都会在 dispose 方法上被调用...但是如果 TextureAtlas 在皮肤之前被处理怎么办? 真的会发生什么问题吗?
皮肤行为不是很明确,我的意思是...dispose 方法有什么作用?
提前致谢,
卢卡
skin.dispose()
调用处置 Disposable
的任何特定资源。但是 TextureAtlas 本身不是其中之一 "resources" 所以它必须与皮肤分开手动处理。
我能想到的一次性皮肤资源的唯一示例是不使用您与皮肤一起使用的 TextureAtlas 的 BitmapFont。
请注意,永远不要对使用 AssetManager 加载的内容调用 dispose
。相反,您应该对该资源调用 manager.unload()
,以便 AssetManager 可以正确管理依赖项。
manager.unload()
的好处在于它会跟踪有多少其他资源依赖于该对象,并且仅在清除依赖项时才释放它。因此,如果您还使用 AssetManager 加载皮肤,则只需担心调用 manager.unload("mySkin")
,它会正确确定是否也应处理关联的 TextureAtlas。
但是请确保每次对同一资源调用 load()
时只对资源调用一次 unload()
。 AssetManager 的内部依赖计数确实依赖于您所有的 load()
和 unload()
调用一对一地相互镜像。
我不想 post 回复,但我无法 post 使用代码 -_- 发表评论。
好的,如果情况如下: `
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()处理所有资源可以吗?