在遊戲開發中,咱們的開發流程通常是node
我開發了款半自動代碼生成器工具主要是解決第2步的問題;之因此稱之爲半自動,由於我以爲全自動代碼生成器應該作到兩點:代碼生成(第2步)+自動綁定(第3步)。自動綁定須要改動預製體文件,因爲全部人的使用方式不盡相同,出現的問題會比較多,我喜歡相對靈活,約束比較少的方式,因此我採用了拖拽設置和代碼設置相結合的方式解決自動綁定的問題。微信
導出與預製體同名的類文件mvc
聲明屬性
框架
若是屬性是無效值進行賦值
函數
若是屬性是按鈕,進行函數監聽,並生成監聽函數
工具
將生成的類導出到指定目錄測試
支持導出指定預製體文件或者目錄,自動實別目錄的子目錄。ui
支持導出Creator 和 Laya 的預製體this
使用TAG標記是否導出指定名稱的屬性,帶有TAG標記符號的節點纔會導出,我TAG是$。若是TAG是無效字符,那麼會導出全部名稱有效的節點。
code
creator導出的屬性名稱後面帶有類型,button帶有sprite會同時輸出。
creator_export:creator文件導出目錄,這個目錄工具會建立而且能夠放到其餘地方。
creator_prefabs: creator文件輸入目錄,通常會設置爲項目的預製體文件夾。放到這裏只是測試使用。
laya_export 和 laya_prefabs :同 creator文件夾。
creator_build.bat: window下的運行腳本,實際上就是直行node 並傳遞兩個參數。若是是mac用戶能夠自行寫一個sh腳本。
creator_prefab.js: creator文件導出的核心代碼。
creator_template.txt: creator導出文件的模板文件,理論上就是字符替換。
file_util.js : 文件輔助類
laya_build.bat,laya_prefab.js,laya_template.txt: 同creator文件。
import BaseView from "../../../cfw/mvc/BaseView"; const { ccclass, property } = cc._decorator; @ccclass export default class LoginView extends BaseView { @property({type: cc.Sprite, displayName: "logointro$Sprite"}) logointro$Sprite: cc.Sprite = null; @property({type: cc.Sprite, displayName: "btn_buy_big$Sprite"}) btn_buy_big$Sprite: cc.Sprite = null; @property({type: cc.Button, displayName: "btn_buy_big$Button"}) btn_buy_big$Button: cc.Button = null; onLoad() { if(!this.logointro$Sprite){this.logointro$Sprite = this.findChild("logointro$").getComponent(cc.Sprite)} if(!this.btn_buy_big$Sprite){this.btn_buy_big$Sprite = this.findChild("btn_buy_big$").getComponent(cc.Sprite)} if(!this.btn_buy_big$Button){this.btn_buy_big$Button = this.findChild("btn_buy_big$").getComponent(cc.Button)} this.registerButtonByNode(this.btn_buy_big$Button,this.onbtn_buy_big$ButtonClick) } onbtn_buy_big$ButtonClick(){ } onDestroy(){ } }
import BaseView from "../../../cfw/mvc/BaseView"; export default class TestView extends BaseView { /** @prop {name:normal, tips:"normal", type:Node, default:null}*/ public normal: Laya.Button = null; /** @prop {name:double, tips:"double", type:Node, default:null}*/ public double: Laya.Button = null; constructor() { super(); } onAwake() { super.onAwake() if(!this.normal){this.normal = this.findChild("normal")} this.registerButtonByNode(this.normal,this.onnormalClick) if(!this.double){this.double = this.findChild("double")} this.registerButtonByNode(this.double,this.ondoubleClick) } onEnable(): void { } onDisable(): void { } onnormalClick(){ } ondoubleClick(){ } }
工具已上傳到框架倉庫中,有須要的自行拉取,如遇到問題能夠微信找我溝通。
歡迎掃碼關注公衆號《微笑遊戲》,瀏覽更多內容。