1. 初衷
好久沒有更新博客了导匣,之前寫了lua元表相關的東西阱飘,如果對元表不理解的話渠欺,可以在站內搜索一下lua的元表以及多繼承。
現(xiàn)在在用quick cocos在寫一款游戲罗丰,等空閑了可以來更新一下躺過的坑神帅。
閑話少說,現(xiàn)在用cocos開發(fā)萌抵,走的路子多是策劃或者美術拼出界面(cocos studio)找御,然后到處csb文件程序加載,再對界面進行各項處理(creator沒用過)谜嫉。
于是問題來了萎坷,一般的做法,將csb讀取過來作為layer的child沐兰,可能會出現(xiàn)非常多次的對其getChild(可能層次很深)哆档,對csb上的某個控件進行setString、setTexture等住闯,怎么做比較好瓜浸?
2. 解決方案
提供幾個解決方案:
* 寫一個公用方法,獲取csb的控件比原,每次都先取得控件后對其操作
* 寫很多個公用方法插佛,對setString的操作啊,對setTexture的操作啊都寫上
* 寫很多個local方法量窘,代碼一樣
* 也是寫很多個公用方法雇寇,分成各個插件,layer自己選擇要去組裝哪些
3. 插件的實現(xiàn)方法
非常簡單蚌铜,只需要幾步
- 寫插件锨侯,e.g:
local ext = {}
function ext:setString()
-- do set string
end
return function (layer)
for k, v in pairs(ext) do
-- 這里加上assert是怕覆蓋了原有的字段
assert(not layer[k], string.format("funciton %s exist", k))
layer[k] = v
end
end
- 注入
local layer = display.newLayer()
require("ext")(layer)
- 使用
這樣就可以直接使用
layer:setString()
4. 總結
使用這種注入的方法,可以大幅度減少代碼的重復量冬殃,也可以不用增加很多公用的方法囚痴,安全且高效。
注入的方法重點是ext的return 函數(shù)审葬,對于使用.
的方法需要有另外的寫法深滚。
等空閑時間奕谭,我會整理一個管理scene layer的框架,包括讀取csb等框架傳到github上痴荐。