有了這基礎,就有了這次的編寫經歷。
首先,考慮到項目目前用的版本quick-cocos2dx的創建UI方式是先解析了ui編輯器導出的json文件,存入內存然後再創建的,這樣的方式肯定會有一個問題:創建ui的速度很慢。而我們項目當前的優化方式是,將json文件通過json.decode解析成lua表然後存入內存,然後每次加載ui就遍歷表格創建。然而這樣的方式還不是最優解。
之前ccs的版本有直接導出成lua代碼文件的,然而只是出現了一下。還有導出bsd文件的,我也沒找到lua的api去使用。
最終還是自己動手吧。
通過python導入json文件轉換爲字典類型,然後對比ExportJson文件裏面的屬性你就可以逐句將ui的各種控件給創建出來。
整個工具寫完,竟然接近900行代碼了!沒辦法,涉及了十幾種控件。
說說python編程時注意的地方:
1、int 0 在比較中是等同於False的!比如,0 or 5,結果是返回0.
2、字典中如果沒有某個key值,你直接獲取是會報錯的。
轉換代碼最糾結的地方在於要給lua文件寫入遞歸的代碼,而控件的長寬或錨點位置的換算在python是不可以的,比如ui:getContentSize()。解決方法是直接將相關屬性定義成字符串,如:options["width"] = "ui:getContentSize()",然後需要和父類或子類進行換算時直接將過程換成字符串形式記錄下來,讓它在lua代碼裏面計算就好。最終整個lua代碼裏面沒有了遞歸。
邊寫邊琢磨quick裏面的uiloader,最終成功地把json轉換爲可用的ui創建代碼!整個遊戲裏的ui佈局都通過這個工具轉換出來的lua代碼創建,測試通過!界面的加載時長得到了極大的提速。以後不用手寫代碼去構建ui佈局了~