有一定工作经验的游戏开发者都知道游戏运行中内存占用最大的莫过于图片资源,所以关于图片资源的管理需要有一定的把握,一般开发中使用的格式为png格式,因为这种格式是全彩色,然而jpg是不支持透明度的,而且png的压缩率比较高,这样有一个好处就是,程序在读取图片资源的时候开辟的临时存储空间会较小。
我们来看一下cocos2d-x中支持的像素格式:
enumclass PixelFormat
{
//! auto detect the type
AUTO,
//! 32-bit texture: BGRA8888
BGRA8888,
//! 32-bit texture: RGBA8888
RGBA8888,
//! 24-bit texture: RGBA888
RGB888,
//! 16-bit texture without Alpha channel
RGB565,
//! 8-bit textures used as masks
A8,
//! 8-bit intensity texture
I8,
//! 16-bit textures used as masks
AI88,
//! 16-bit textures: RGBA4444
RGBA4444,
//! 16-bit textures: RGB5A1
RGB5A1,
//! 4-bit PVRTC-compressed texture: PVRTC4
PVRTC4,
//! 4-bit PVRTC-compressed texture: PVRTC4 (has alpha channel)
PVRTC4A,
//! 2-bit PVRTC-compressed texture: PVRTC2
PVRTC2,
//! 2-bit PVRTC-compressed texture: PVRTC2 (has alpha channel)
PVRTC2A,
//! ETC-compressed texture: ETC
ETC,
//! S3TC-compressed texture: S3TC_Dxt1
S3TC_DXT1,
//! S3TC-compressed texture: S3TC_Dxt3
S3TC_DXT3,
//! S3TC-compressed texture: S3TC_Dxt5
S3TC_DXT5,
//! ATITC-compressed texture: ATC_RGB
ATC_RGB,
//! ATITC-compressed texture: ATC_EXPLICIT_ALPHA
ATC_EXPLICIT_ALPHA,
//! ATITC-compresed texture: ATC_INTERPOLATED_ALPHA
ATC_INTERPOLATED_ALPHA,
//! Default texture format: AUTO
DEFAULT =AUTO,
NONE = -1
};
关于以上格式中有一部分的格式后面跟随着一些阿拉伯数字,代表的意思是颜色的位所占的内存大小,单位为bit,计算机图形学中对于计算机的颜色缓存的大小是有这么介绍的
size = (picWidth*picHeight)*(r + g + b)bit;如RGB565这种格式所占的内存大小为(picWidth*picHeight)*(5 + 6 + 5);在texture2d这个类里面有一个函数
staticvoid setDefaultAlphaPixelFormat(Texture2D::PixelFormat format);
(1)由此我们可以自定义设定游戏中纹理的默认像素格式,以更好地把握游戏的内存占用,也可以控制包的大小;
(2)PVR这种格式目前只支持苹果上使用,可以被ios的显卡直接读取,因此具有比png更好的效率以及更小的内存,推荐读者在实现跨平台开发过程中把握安卓跟ios的资源管理;
至于资源管理器,读者可以参考以上自行实现