我正在通过教程来学习 Libgdx,每次我看到时,都会使用相同的实例或变量来输出 Sprite 对象。所以,我可以理解,如果我们想要创建和渲染相同的图像或 Sprite ,我们可以简单地使用相同的变量。但现在,我需要显示多个对象(不同的玩家/图像)。我仍然可以使用相同的变量来输出它们还是应该为每个变量创建变量?因为我已经看到它节省了空间和内存。为了输出 Sprite ,我使用 SpriteBatch、Texture、Sprite 和 TextureRegion(用于移动 Sprite )对象。
最佳答案
不,你不能对不同的实体(玩家等)使用相同的 Sprite 对象,这不是你节省内存的地方。 Sprite 对象的创建不是重量级操作。
可以节省内存的地方是纹理。您应该尽可能重复使用纹理。您不希望每次创建新的 Sprite 时都加载新的纹理。假设有 1 个图像代表一名玩家,您不应该一次又一次地创建该图像。您应该使用 AssetLoader 将其加载到内存中一次,然后重新使用它。
如果您有多个小尺寸纹理,那么您应该使用 libgdx 的纹理打包程序将它们打包到单个图像中,因为加载多个小纹理不是一个好主意,而是加载更大的纹理表就可以了,因为绑定(bind)纹理是一个昂贵的操作。阅读此Texture Atlas了解更多详细信息。
此外,一旦您不需要纹理,就应该丢弃它们。
阅读此页 Memory Management in Libgdx有关由许多 Libgdx 类实现的 Disposable 接口(interface)的更多信息。
我还觉得您正在过早地尝试优化您的游戏。在这么早的阶段根本不用担心对象的创建。请记住一件事 - 过早的优化是万恶之源。
关于java - LibGdx 多个对象的一个或多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42931937/