我知道在这个问题上有很多主题,但就我的情况而言,我找到的here中唯一没有回答。
所以我问同样的问题:
我是否需要担心为仅限桌面游戏设置我的AssetManager静态?
现在只是总结和澄清手机游戏静态参考问题,让我说我也想在手机上使用静态AssetManager(因为我发现它更方便)。我知道这会导致纹理被放置在 pause()上,但我可以在 resume()上重新加载它们吗?
假设我有一个使用纹理 A (之前加载到静态AssetManager中)的玩家的动画。如果游戏暂停,则AssetManager参考很可能会丢失。如果在 resume()方法中,我重新创建此AssetManager(MyGame.asset = new AssetManager()
)并重新加载纹理 A ,我的动画会发生什么?我是否还需要重新加载它?
我在Texture Javadoc中找到了这句话:托管的纹理会自动重新加载。我认为这只适用于非静态AssetManager,我是对吗?
最后一个问题仅用于总结在移动应用程序中使用静态AssetManager。
答案 0 :(得分:1)
正如Abhishek Aryan正确指出的那样:对你的资源使用静态变量是一个严重的基本设计缺陷。无论您运行应用程序的平台如何,您都应该担心,桌面上也是如此。根据您的设计的其余部分,您可能会遇到或可能不会遇到问题。
通常有这些设计缺陷,一开始似乎对你起作用。但是稍后你会遇到问题。不幸的是,到目前为止,您已经在开发过程中取得了进展,以至于您无法轻易纠正基本问题,而是需要对其进行黑客攻击。
请注意,只要您正确管理它们(这比不使用它们更难),在技术上完全可以在任何平台上使用静态资源。例如,libgdx本身是围绕
Gdx
静态成员构建的。
回答您的其他问题:
我知道这会导致纹理被置于暂停()但是我可以在resume()上重新加载它们吗?
这是不正确的。纹理永远不会在pause
中处理,也不需要在resume
中重新加载。
如果游戏暂停,AssetManager参考很可能会丢失。
这是不正确的。我不确定你为什么这么想,但事实并非如此。
我是否还需要重新加载?
如果您决定丢弃旧纹理(您必须自己进行处理,而不是自动完成),那么使用该纹理的任何Animation
都将无效。因此,如果您希望动画使用不同的纹理,则必须更新动画或重新创建动画。
我认为这只适用于非静态AssetManager我是对吗?
不,托管纹理不关心您是否使用静态资源。当上下文丢失时,它们总是被重新加载。请注意,您不太可能遇到这种情况,所以您不必关心这一点。
您可能还想阅读我之前就此主题撰写的this post。