【发布时间】:2016-03-29 17:12:28
【问题描述】:
我目前在编程时使用“Learning LibGdx Game Development, Second Edition”一书作为参考书,我偶然发现了他们对资产管理类的实现。他们使用单例模式来实现它,我真的没有经验。这个 Manager 类在所有屏幕中只有一个实例,并且会在游戏关闭时被释放。所以从我(相当缺乏经验)的观点来看,我同意作者的观点,单身是有道理的,因为这样我就不必把它传递给我需要它的每个班级。但是我也听说他们得到了一点名声不好,所以我想我会在这里问。对 LibGdx 中的资产管理类使用单例模式是否有意义?
【问题讨论】:
-
你的书正在做危险的事情。我看到 AssetManager 被大量用作静态对象,但这违反了文档中的建议。基本上,当你在后台运行你的应用程序时,Android 可以转储 Singleton 的内容,你最终会得到黑色图像。 github.com/libgdx/libgdx/wiki/…
-
实际上,被转储的不是单例的内容,而是单例保持链接的视频内存中的纹理。尽管如此,生成的黑色图像是相同的。
-
@Menno Gouw 我可以理解为什么单例不是给出答案的最佳主意,我确实将它改回了传递的普通对象。但是
AssetManager对象不是静态的,所以从那方面应该没有任何问题,我错了吗?有点试图更好地理解,因为我确实阅读了文档并且没有因此而使其成为静态。 -
如果
AssetManager不是静态的,你就可以了。我总是创建一个带有静态AssetDescriptors的Assets类,因此当我想从经理那里获取资产时可以使用它们。myTexture = assetManager.get(Assets.MyStaticAssetDescriptor)。这在生命周期内都是安全的,您不会错过拼写,您不必将资产转换为正确的类型,并且您可以通过智能感知获得一份不错的资产列表。 -
感谢您的提示。 :) 但是我使用的是纹理图集,这意味着我只能通过
findRegion(String name)或createSprite(String name)获取纹理,并且由于这些方法的成本相当高,因此建议将它们缓存起来。所以我不能真正使用 AssetDescriptors。
标签: java libgdx singleton asset-management