這里的優化停留在客戶端等級。
圖片是怎樣存在于內存中的、優化方式
大多數情況下,排除內存泄漏的情況,手機內存是被紋理(texture)占用。
默認情況下,在cocos里加載一張圖片,每一個像素點使用4個byte來表示1個byte(8位)代表red,另外3個byte分別代表green、blue和alpha透明通道。這個就簡稱RGBA8888.
舉例來說,一張1136x640的背景圖占用的內存為 1024x1024x4(byte) / (1024*1024) = 4 MB
RGBA4444每一個像素點占用2個byte。因為1個byte(8位),r 4位、g 4位、b 4位、a 4位,一共是2個byte。
舉例來說,一張1136x640的背景圖占用的內存為 1024x1024x2(byte) / (1024*1024) = 2 MB
但是RGBA4444會是圖片質量下降。然后需要注意cocos默認加載方式是RGBA8888,如果部分圖片為RGBA4444,需要設置PixelFormat。如下:
Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA4444);
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("hall.plist", "hall.png");
Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA8888);
下面是使用RGBA8888(左)和RGBA4444(右)的區別:
test.png
有時間再整理