在2D游戏中图片无疑是最为重要的资源文件,它会被加载到内存中转换为纹理,由GPU贴在精灵之上渲染出来。它可以优化的方面不少,包括:图片格式、拼图和纹理格式等,下面咱们从这几个方面介绍一下图片和纹理的优化。
1.选择图片格式
要回答这个问题,咱们须要先了解一下目前在移动平台所使用的图片文件格式,以及这些图片格式Cocos2d-x是否支持。图片格式有不少,可是在移动平台主要推荐使用的PNG,JPG也能够考虑,而其它的文件格式最好转化成为PNG格式。咱们先了解一下它们的特色。
一、PNG文件
PNG文件格式设计目的是替代GIF和TIFF文件格式,是一种位图存储格式。PNG是采用无损压缩,能够有Alpha通道数据支持透明,但不支持动画。PNG能够保存高保真的较复杂的图像,可是文件比较大。PNG格式具体又分为:PNG8和PNG24,后面的数字则是表明这种PNG格式最多能够索引和存储的颜色值。
二、JPG
JPG全名是JPEG。JPG图片以 24 位颜色存储单个位图图形。JPG是与平台无关的格式,支持最高级别的压缩,压缩比率能够高达 100:1,这种压缩是以牺牲图像质量为代价的,换取更小文件大小。JPG不支持透明。JPG比较支持摄影图像或写实图像做品,这是由于它们颜色比较丰富。而对于所含颜色不多、具备大块颜色相近的区域或亮度差别十分明显的较简单的图片,JPG就不太适合了。
那么咱们选择JPG仍是PNG呢?不少人认为JPG文件比较小,PNG文件比较大,加载到内存纹理,JPG占有更少的内存。这种观点是错误的!纹理与图片是不一样的两个概念,若是纹理是野营账篷话,那么图片格式是收纳折叠后的账篷袋子,装有账篷的袋子大小,不能表明账篷搭起来后的大小。特别是在Cocos2d-x平台JPG加载后被转化为PNG格式,而后再转换为纹理,保存在内存中,这样无形中增长了对JPG文件解码的时间,所以不管JPG在其它平台表现的多么不俗,可是在移动平台下必定它没法与PNG相提并论。
缓存
2.拼图
不知道你们是否有过这样的一个疑问,为何要把场景中小图片都拼接成一个大图片呢?这个问题咱们在使用精灵表的时候简单说了一下,这一节咱们详细介绍一下它缘由。
若是把多个小图拼接称为一个大图(纹理图或精灵表),能够减小IO操做。而且使用散图每次都要针对一个图,建立精灵添加到纹理缓存,若是很频繁而大量建立,对于CPU和内存的开销很高。而使用大图,则一次性将建立精灵帧缓存,并把它们纹理添加到纹理缓存中,这样会明显地提升效率。
在进行图片拼接的时候,若是可以知足用户保真度状况下,大图越小固然是越好。咱们能够经过TexturePacker等纹理拼图工具,设置纹理支持NPOT,这些工具的使用你们能够参考咱们的(《Cocos2d-x实战(卷Ⅳ):工具详解》)。
那么什么是NPOT呢?NPOT是“non power of two”的缩写,意思是非2的N次幂。在OpenGL ES1.1时候纹理图片要求是2的N次幂(即,POT),不然纹理没法建立。POT要求下使用纹理工具拼接成的大图,能够会有不少的空白区域。以下图所示,右下角还有一些空白区域,形成了浪费,也会同时增长图片的大小,下图所示的图片大小是2048KB。
微信
POT拼图工具
OpenGL ES2.0后支持了NPOT,咱们不须要为图片是否为2的N次幂而苦恼,如图所示,是采用NPOT拼图,整个图片基本上没有大的空白区域,能充分地利用了图片空间。20-24所示的图片大小是1822KB,节省了200KB,200KB已经很了不得了。
优化
NPOT拼图动画
更多内容请关注国内第一本Cocos2d-x 3.2版本图书《Cocos2d-x实战:C++卷》网站
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
spa
欢迎加入Cocos2d-x技术讨论群:257760386.net
欢迎关注智捷iOS课堂微信公共平台设计