1

我正在 cocos2d-x 中制作一个包含大量精灵表的游戏。角色和效果太多,每个都使用帧序列。apk 文件大于 400mb。所以我必须压缩这些图像。

实际上,序列中的每一帧与其他帧相比只有一点点差异。所以我想知道是否有一种工具可以压缩一系列帧而不是将它们放入精灵表中?(骨架动画可以提供帮助,但效果不能视为骨架。)

比如有一个包含10个png文件的效果,每个文件的大小为1mb。如果我使用 TexturePacker 将它们制作成精灵表,我将有一个 8mb 的大 png 文件和一个 100kb 的 plist 文件。总大小为 8.1mb。但是如果我可以使用帧之间的差异来压缩它们,也许我会得到一个 1mb 的 png 文件和 9 个 100kb 的文件,用于在加载过程中复制其他 9 个 png 文件。此方法只需要 1.9mb 大小的磁盘。而且如果我可以将它们转换为pvrtc格式,运行时所需的内存也可以减少。

顺便说一句,我现在正尝试在游戏加载期间将 .bmp 转换为 .pvr。是否有任何转换为​​ pvr 的库?

谢谢!:)

4

1 回答 1

1

如果您有很多纹理要转换为 pvr,我建议您从www.imgtec.com获取 PowerVR 工具。它带有 GUI 和 CLI 变体。PVRTexToolCLI 为我完成了这项工作,我编写了一个大规模的转换工作。免费下载,免费使用,您必须在他们的网站上注册。

我刚刚对其进行了测试,它可以将许多格式转换为 pvr(包括 bmp 和 png)。

在你去那里(大规模的批处理工作)之前,我建议你尝试一些变体。PVR(通常)在磁盘上很胖,加载速度很快,并且等效于 RAM 中的其他格式...... RAM 要求基本上取决于像素数以及为每个像素编码的位数。您可以使用 pvr 获得一些有趣的磁盘大小,具体取决于您使用的输出格式和位数……但它可能是有损的,并且您可以获得可见的伪像。因此,在决定全口径之前先尝试有限的样本。

甚至在任何转换之前,我首先要看的是你的动画。由于您使用的是 TP,它可以检测重复帧并将 N 帧别名为纹理上的单个帧。例如,我的设计团队为我提供了所有 5 张图片但 8 帧的“行走/站立”动画!plist 包含缺失纹理的帧别名。在我所有的立场中,第 8 帧与第 2 帧相同,因此纹理只包含第 2 帧,但是 plist 人为地生成了第 2 帧图像的第 8 帧。

我要看的另一个地方是使用 16 位。这将有利于包大小、运行时的内存需求和加载速度。例如,将 RGBA565 用于没有透明度的纹理,或将 RGBA5551 用于动画。再次尝试一些以确保您获得可接受的渲染。

玩得开心 :)

于 2014-09-30T15:38:21.227 回答