LibGDX静态AssetManager仅用于桌面游戏

时间:2017-09-08 13:15:54

标签: libgdx

我知道在这个问题上有很多主题,但就我的情况而言,我找到的here中唯一没有回答。

所以我问同样的问题:

我是否需要担心为仅限桌面游戏设置我的AssetManager静态?

现在只是总结和澄清手机游戏静态参考问题,让我说我也想在手机上使用静态AssetManager(因为我发现它更方便)。我知道这会导致纹理被放置在 pause()上,但我可以在 resume()上重新加载它们吗?

假设我有一个使用纹理 A (之前加载到静态AssetManager中)的玩家的动画。如果游戏暂停,则AssetManager参考很可能会丢失。如果在 resume()方法中,我重新创建此AssetManager(MyGame.asset = new AssetManager())并重新加载纹理 A 我的动画会发生什么?我是否还需要重新加载它?

我在Texture Javadoc中找到了这句话:托管的纹理会自动重新加载。我认为这只适用于非静态AssetManager,我是对吗?

最后一个问题仅用于总结在移动应用程序中使用静态AssetManager。

1 个答案:

答案 0 :(得分:1)

正如Abhishek Aryan正确指出的那样:对你的资源使用静态变量是一个严重的基本设计缺陷。无论您运行应用程序的平台如何,您都应该担心,桌面上也是如此。根据您的设计的其余部分,您可能会遇到或可能不会遇到问题。

通常有这些设计缺陷,一开始似乎对你起作用。但是稍后你会遇到问题。不幸的是,到目前为止,您已经在开发过程中取得了进展,以至于您无法轻易纠正基本问题,而是需要对其进行黑客攻击。

  

请注意,只要您正确管理它们(这比不使用它们更难),在技术上完全可以在任何平台上使用静态资源。例如,libgdx本身是围绕Gdx静态成员构建的。

回答您的其他问题:

  

我知道这会导致纹理被置于暂停()但是我可以在resume()上重新加载它们吗?

这是不正确的。纹理永远不会在pause中处理,也不需要在resume中重新加载。

  

如果游戏暂停,AssetManager参考很可能会丢失。

这是不正确的。我不确定你为什么这么想,但事实并非如此。

  

我是否还需要重新加载?

如果您决定丢弃旧纹理(您必须自己进行处理,而不是自动完成),那么使用该纹理的任何Animation都将无效。因此,如果您希望动画使用不同的纹理,则必须更新动画或重新创建动画。

  

我认为这只适用于非静态AssetManager我是对吗?

不,托管纹理不关心您是否使用静态资源。当上下文丢失时,它们总是被重新加载。请注意,您不太可能遇到这种情况,所以您不必关心这一点。

您可能还想阅读我之前就此主题撰写的this post