版本:2.3.4
參考 :
合圖可以減少http請求次數,降低drawcall。所以一般項目中碎圖都會合並為一張大圖。
1. cocos自動圖集功能 + 壓縮插件 (推薦)
2. TexturePackerGUI + TinyPNG (改動一次就需要再合圖一次,麻煩)
1. cocos自動圖集 + 壓縮插件
自動圖集功能就是Cocos的自動合圖功能,這里以5個裝備圖標為例子。
將5個零碎圖標通過自動圖集功能,在發布時自動合成一個整圖。
將5個裝備圖標,放在assets/resources/weapon文件夾下,weapon文件夾上右鍵,選擇自動圖集配置
生成了一個AutoAtlas文件
選中AutoAltas文件,在右側屬性檢查器中點擊Preview,可以預覽自動合圖后的效果
選擇構建發布項目
發布后,在build/web-mobile/res/raw-assets中查看,可以看到5個零碎圖標被自動合成了一張圖
5個零碎圖標:
合並后圖標,合並后大小略有增加,因為圖標本身很小,這里看着不明顯。
壓縮紋理
cocos提供了圖片壓縮功能,只不過這個功能貌似有點問題。
選擇AutoAtlas文件,設置png的質量為80:
構建發布后合圖大小為13.6kb
png的質量為10:
構建發布后,合圖大小為15.4kb
為何質量越低,大小反而越大?商城有一個壓縮插件,在構建項目后,會自動壓縮圖片。
插件用法參考 https://www.cnblogs.com/gamedaybyday/p/13475550.html
2. TexturePackerGUI + TinyPNG
使用TexturePackerGUI手動合圖后,在通過tinypng等壓縮。
這個優點是可自定義合圖,缺點就是美術換圖,你得再重復合圖壓縮一遍。
現有5個圖片
將圖片拖動到texturepacker中
點擊菜單欄,右上位置的“發布精靈表”
得到png和plist兩個文件,拖動到cocos的assets下
在cocos的assets文件夾下,會看到大圖weapon下,有5個小圖的圖標,拖動小圖圖標到舞台即可使用
那么原來加載單張小圖並顯示到舞台是這樣
cc.loader.loadRes("test.png",cc.SpriteFrame,(err, res)=>{ sp.spriteFrame = res; })
現在加載圖集並顯示其中一個小圖到舞台
cc.loader.loadRes("weapon/weapon",cc.SpriteAtlas,(err, res:cc.SpriteAtlas)=>{ sp.spriteFrame = res.getSpriteFrame("item_z10001"); })
5個零碎圖大小13kb
texturepack合圖大小22kb
TinyPNG壓縮后為8kb