Laya事件派發和監聽
新建個類繼承自EventDispatcher
可調度事件的所有類的基類。Laya中所有事件都是繼承自這個類。
export class GameDispatcher extends Laya.EventDispatcher{ private static _instance:GameDispatcher = new GameDispatcher(); public static getInstance():GameDispatcher{ return this._instance; } protected constructor(){ super(); } }
再新建一個定義事件名的類
export class EventName{ public static readonly EVENT_NAME_STRING1 = "1"; public static readonly EVENT_NAME_STRING2 = "2"; }
監聽和派發事件
private initDemo():void{ GameDispatcher.getInstance().on(EventName.EVENT_NAME_STRING1,this,this.monitorEvent); GameDispatcher.getInstance().event(EventName.EVENT_NAME_STRING1); } private monitorEvent():void{ console.log("監聽到事件"); }
可以看到控制台輸出監聽事件。
事件派發時傳參
/**
* 派發事件。
* @param type 事件類型。
* @param data (可選)回調數據。<b>注意:</b>如果是需要傳遞多個參數 p1,p2,p3,...可以使用數組結構如:[p1,p2,p3,...] ;如果需要回調單個參數 p ,且 p 是一個數組,則需要使用結構如:[p],其他的單個參數 p ,可以直接傳入參數 p。
* @return 此事件類型是否有偵聽者,如果有偵聽者則值為 true,否則值為 false。
*/
event(type: string, data: any = null): boolean
private initDemo():void{ let str1:string = "行運茶"; let str2:string = "快樂水"; GameDispatcher.getInstance().on(EventName.EVENT_NAME_STRING1,this,this.monitorEvent); GameDispatcher.getInstance().event(EventName.EVENT_NAME_STRING1,str1); } private monitorEvent(str1:string):void{ console.log("監聽到事件",str1); }
在搭建游戲框架里就可以自己定義個事件類EventName和一個繼承EventDispatcher類的單例管理游戲里的事件監聽跟派發。