内存优化
在游戏中,占用内存最多的无非就是图片资源,所以如果可以从图片资源上面进行优化,那么得到的收益将会是最大的。
资源占用
首先,先来看一下一张144X144的图片在物理磁盘上面的占用的存储空间大概是30KB,但是使用Cocos2d-x游戏引擎加载到内存里面,它需要占用至少256KB的大小。
主要的原因有以下两个:
Cocos2d-x在向手机申请纹理图片内存的时候,只能将图片的宽高尺寸以2的n次幂大小来计算。
Cocos2d-x默认的纹理深度是32位。
对于第一点,由于144并非是2的次幂数,与之相近的2的次幂数分别是128和256。如果使用128,那么申请到的内存空间显然无法存放144X144这么大的图片,那么只好使用256来进行计算,也就是Cocos2d-x会把它当成256X256大小的图片来申请空间,但是图片本身没有那么多数据,所以造成了内存空间的浪费。
关于第二点,Cocos2d-x使用32位的像素格式来保存像素信息,也就是图片上的一个像素需要占用32位(bit)。一个字节(byte)又等于8位(bit),所以一个像素需要占用4个字节(32 / 8)的大小。
所以,可以轻易的得出144X144图片占用的内存为:
【内存 = 图片的宽 X 图片的高 X 4byte】
也就是:
256 X 256 X 4 = 262144 byte
然后,1KB = 1024byte,所以它占用的内存大概是256KB(262144 / 1024)。
合理利用内存
根据上面提到的两点浪费内存的原因,我们就可以对症下药了。
对于图片尺寸导致的内存浪费问题,我们可以将很多小张的图片合成一张大张的纹理图,让大图的尺寸等于2的n次幂,这样我们就可以尽可能的去利用那些原先被浪费掉的内存。
合成大图的工具有很多,我个人比较推荐使用TexturePaker,这个工具有mac和win版本的,而且操作和界面布局基本一致。关于TexturePaker的用法,网络上面的教程很多,可以自行搜索。
这里要说的一点是Publish导出纹理集的时候要选择格式为“Cocos2d plist(*.plist)”格式 ,这样Cocos2d-x游戏引擎可以直接加载并解析。
导出纹理集格式
不同的设备由于设备硬件的不同,可以加载的图片的最大尺寸也不同,所以我比较建议最大的纹理集尺寸为2048X2048 ,这样可以保证在所有的主流设备上面都能够得到正确的加载。
修改像素格式
图片上面每个像素都有RGBA四个通道,RGB三个通道用于表示该像素的颜色值,A通道用于表示Alpha(透明)通道,每个通道默认使用8bit的内存来