LIBGDX使用spritesheet或单个图像更好吗?

时间:2014-01-22 09:17:45

标签: java android libgdx sprite

我是LIBGDX的新手,我为“英雄跑”精灵制作了40帧,我不知道使用spritesheet或单个图像是否更好。 Spritesheet非常大,因为即使在1080p设备上我也想要很高的重量。你能告诉我在哪种情况下(spritesheet或个人图片)表现会更好吗?

3 个答案:

答案 0 :(得分:11)

由于此处的其他答案并未指向错误的方向,但并非100%准确,我将添加更详细的解释。

如果是动画,它在性能方面应该没有区别!

无论您使用spritesheet还是单个图像,它们都只会被发送到GPU一次。与spritesheets的唯一区别是你只需绑定纹理一次,并且在渲染不同的东西时你不会被迫改变它。

但这并不适用于你的英雄动画。无论是使用spritesheet还是单个图像,在每个帧中都需要再次绑定纹理,并且只绘制其中的一部分(在spritesheet的情况下)或整个图像(在单个图像的情况下),因为在两帧,你也渲染其他非英雄的东西。

如果您在一帧中绘制几个英雄,则会出现例外情况。使用单个图像,您每次都必须切换纹理,因为英雄可能没有同步。在spritesheet的情况下,你只绑定纹理一次,然后使用一次sheet-texture绘制所有英雄(在这种情况下只会发生一次纹理绑定)。

但是,如果你让你的角色 - 动画 - spritesheet成为另一个“更大”的spritesheet的一部分,你也肯定会获得性能提升,其中还包含其他纹理。这样,只需一个纹理绑定就可以再次绘制角色和其他东西。

spritesheets的唯一问题是,它们往往会浪费一些空间。特别是在移动设备上,当你被迫使用POT(2个幂)大小的纹理时,这可能会有所不同。

答案 1 :(得分:2)

我认为最好使用TextureAtlases(应该是某种spritesheet)。请注意,某些较旧的Android设备无法加载比512 * 512更大的图像。如果您不定位旧设备,则应将最大值设置为1024 * 1024像素。因此,如果你的spritesheet需要更多,那么你应该把它分成多个。

答案 2 :(得分:2)

Spritesheets效率更高。

在OpenGL(Libgdx是包装器)中,通过发送到图形卡来绘制纹理。使用SpriteSheets的原因是整个纹理只需要“发送”一次,然后每个精灵帧可以绘制单独的图像片段。这比为每个帧绑定新纹理要快得多,这在资源方面会非常浪费。

相关问题