【步兵 cocos2dx】圖片管理 By EOS.
好久沒有更新了=、= 天太熱,新工作下班就好TM晚。o(︶︿︶)o 唉
進入正題
用texturePacker來圖片打包的好處就是壓縮尺寸和一次性加載,減少文件讀寫次數。
而且加載速度也有優化,反正好處就是多多多。
但是呢,每次把圖片打包又煩煩煩,所以呢,我給大家分享一些經驗=、=
祕籍1:打包和不打包不影響代碼
這點做到了的話,什麼時候圖片打包還重要麼~哈哈哈哈,發版本的時候在批量處理就好了
我用僞代碼來說明一下=、=(就不貼代碼,你能怎樣)
--我就直接用lua代碼了,其他的也都大同小異
function newSprite(name, touchEvent, rectInsets)
--touchEvent 如果不是nil 就添加點擊事件,addTouchToNode
--rectInsets 如果不是nil 就用改用Scale9Sprite
--以上兩點就不提了,講主要內容=、=
local retSprite = nil
--先從 幀緩存中獲取(因爲最後發包肯定是用pvr.ccz所以這個判斷放在前面,減少判斷次數)
retSprite = SpriteFrameCache:getSpriteFrameByName(name)
if not retSprite then
--沒有咋辦類~,加載plist唄
--命名規則規劃好,前綴_文件名.png(前綴是文件夾的名字),最後打包出 前綴.plist
local plist = 截取前綴
if isFileExist(plist) then
--如果plist存在
SpriteFrameCache:addSpriteFramesWithFile(plist)--加載
retSprite = newSprite(name, touchEvent, rectInsets)
else
--如果plist不存在
if isFileExist(name) then
--如果圖片本身存在
retSprite = Sprite:create(name)
end
end
end
if not retSprite then
--到這裏還沒有,就是沒有輸入有問題了,比如png打成了papapa,=、=
retSprite = newSprite(DefaultValues.PNG)
--加載默認圖片之前說過好處,再強調一邊,返回nil真機上崩潰查起來真的很麻煩,
--但是如果看到大紅色默認PNG那就肯定知道是圖片出了問題~
end
return retSprite
end
那麼問題來了,小名曰:項目已經進行了大半,但是沒有用規範命名怎麼辦呀呀呀呀~
麼關係,還有後手~
--配個表
imgPlist = {
["aa.png"] = "ui/haha.plist",
["vv.png"] = "ui/inGame/vava.plist",
}
--然後就這樣
if imgPlist[name] then
plist = imgPlist[name]
--其他如上
end
祕籍2:當然就是批處理
上邊也有說,命名規範化,當然要有批處理的支持,難道要累死不成~
這裏推薦一下luaForWindows,直接用lua就可以寫了,方便很多,bat太反人類
或者說太落後了=、=,當然如果之前會ruby和python就無所謂了。
規範化的命名還有很多好處的,比如寫UI,我前綴名字,就用view的名字,
一來根據ui來圖片找起來直觀,
二來showView和closeView,可以寫個基類,來控制加載和卸載plist文件
三來打包的時候,批量話起來更簡單,直接把文件夾下的所有圖片 打成 文件夾名.plist
(文件夾和文件名 拼接這步應該在之前就處理了)
祕籍3:當然就是texturepacker的使用
您的軍功值未達標,不可查看
總結
後邊我還會分開來講winLua和texturepacker的命令行使用=、=
over~
See Again~
之前
真愛無價,歡迎打賞~