Cocos2d-x優化中關於背景圖片優化

因爲背景圖片長時間在場景中保存,並且圖片不少,咱們能夠對其進行一些優化。咱們經過以下幾個方面考慮優化:
一、不要Alpha通道
背景圖片的特色是不須要透明的,因此紋理格式能夠採用不帶有Alpha通道格式,因此RBG565格式比較適合背景圖片。
二、拼圖
背景圖片與其它的圖片紋理格式的不一樣,咱們在建立精靈表的時候,沒有辦法將RBG565格式的背景圖片與其它的紋理圖片(如:RGBA4444)作在一個精靈表,因此基於格式的考慮咱們能夠將多個背景放置在一個精靈表中的,可是要注意這個精靈表拼接成的大圖文件不能太大,一些老設備對於單個文件大小是有限制的,如:iPod touch 4是單個文件不能超過2048 * 2048像素大小。
三、加載到紋理緩存的時機
何時加載背景圖片到紋理緩存呢?這個問題主要看這個背景圖片的場景使用使用頻率,若是頻率高就要在遊戲初始化時候加載。頻率比較低的場景背景圖片,能夠考慮進入場景時候加載。在圖片進行加載的時候,因爲背景圖片比較大加載時間比較長,能夠考慮異步加載。
四、小紋理圖片,重複貼圖
若是場景的背景採用單色或有規律的圖形,咱們能夠採用小紋理圖片,重複貼圖實現。咱們在第8章案例採用了一個128x128紋理圖片(BackgroundTile.png)反覆貼圖上,這樣能夠減小內存消耗。核心代碼以下:
//貼圖的紋理圖片寬高必須是2的n次冪,128x128
auto bg = Sprite::create("BackgroundTile.png", 
Rect(0, 0, visibleSize.width, visibleSize.height));
//貼圖的紋理參數,水平重複平鋪,垂直重複平鋪
Texture2D::TexParams tp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
bg->getTexture()->setTexParameters(tp);
bg->setPosition(origin + Vec2(visibleSize.width/2, visibleSize.height/2));
addChild(bg, 0);


五、考慮使用瓦片地圖
背景能夠考慮採用瓦片地圖實現。瓦片地圖因爲只須要幾個小圖片就能夠構建一個很大的遊戲背景,它的性能自不用多說,可是它的缺點也是因爲採用幾個瓦片拼接而成,背景上有不少重複的區域,若是用戶不在意這些,固然選擇瓦片地圖構建背景是咱們首選方式。另外,在設計瓦片地圖的時候地圖中的層不要超過4層。


六、背景z深度的優化
有的時候爲了達到動態視差效果,背景被分紅了幾個圖片,如圖所示,咱們能夠把雲、樹木、草地和山分別放置在不一樣背景圖片中,咱們經過設置z軸順序(z-order)。




這種狀況下咱們開啓深度測試。OpenG ES中的深度測試是採用深度緩存器算法,消除場景中的不可見面。在Cocos2d-x中開啓深度測試,能夠在AppDelegate.cpp中修改代碼以下:
bool AppDelegate::applicationDidFinishLaunching() {
    … … 
director->setDepthTest(true);


    return true;
算法

}緩存

director->setDepthTest(true)開啓深度測試directorDirector類是的對象指針深度測試默認是關閉若是開啓深度測試會消耗更多的電量微信



更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com
歡迎加入Cocos2d-x技術討論羣:257760386歡迎關注智捷iOS課堂微信公共平臺app

相關文章
相關標籤/搜索