案例:如何将APK包内的图形大小减少86%
开发者米兰·巴布斯科夫(Milan Babuskov)讲述了在APK包内优化图形大小的经验。我们翻译了这篇文章并分享。
巴布斯科夫是自己的独立工作室Bigosaur的创始人。在制作卡牌战斗游戏Gods of Sparta的过程中,开发者遇到了一个问题。由于Android设备的多样性,他决定创建6种不同大小的图形资源。然而,这导致最终APK包的大小超过了300MB。
APK文件的最大大小限制为100MB。其余的必须额外加载。开发者承认自己讨厌在下载游戏后又浪费时间加载数百兆的数据。因此,他开始寻找解决方案,以消除未来用户在项目上的这些问题。
经过不同方法的探索,开发者决定将不透明纹理单独保存为JPG格式,而透明纹理则保存为PNG格式。这将节省空间。然而,这种方法的主要缺点在于,游戏中90%的图形正是透明的。此外,卡牌的边缘是圆角。因此,巴布斯科夫将每张卡牌拆分为两个图像——边框和内容(见图)。
游戏中有4种类型的卡牌,每种类型仅有一种边框。所有卡牌的内容各不相同,但这里不再需要透明度。因此,开发者最终将126张PNG纹理的卡牌替换为126张JPG格式的卡牌和4个PNG格式的边框。
接下来节省空间的方法是“翻转”图像。在游戏过程中,用户将卡牌从屏幕的一部分移动到另一部分。结果,卡牌上的图像会被镜像翻转。为了不存储两种图像,开发者使用了函数AtlasRegion.flip() [游戏是用Java编写的——编辑注]。为了不完全翻转所有的JPG图像,他通过setRegionY和setRegionHeight指定了需要更改的区域。然后,他将结果保存到卡牌的主图像组中,此后仅在代码中定义“隐藏”或“显示”获得的图像。
最终,APK文件的大小为42MB。这比开发者最初预期的减少了86%。