主要流程:
private createGameScene():void { var JimGreen = new Boy(); var HanMeimei = new Girl(); JimGreen.name = "JimGreen"; HanMeimei.name = "HanMeimei"; //擁有事件的人要接受事件的訂閱:訂閱的事件類型、事件發布的響應、告訴響應者誰是發布者(貌似寫誰都一樣) //偵聽器的格式必須是 listenerName(evt:Event):void () JimGreen.addEventListener(MyEvent.DATE, HanMeimei.receive, JimGreen); JimGreen.invite();
JimGreen.removeEventListener(MyEvent.DATE, HanMeimei.receive, JimGreen); } } //首先要自定義事件 class MyEvent extends egret.Event { //事件的類型用 type:string 來注冊 public constructor(type:string, bubbles:boolean = false, cancelable:boolean = false) { //param type 事件的類型,可以作為 Event.type 訪問。 //param bubbles 確定 Event 對象是否參與事件流的冒泡階段。默認值為 false。 //param cancelable 確定是否可以取消 Event 對象。默認值為 false。 //param data 與此事件對象關聯的可選數據。 super(type, bubbles, cancelable); } //每個自定義事件要有一個唯一事件類型,因此用 static 修飾比較合適 public static DATE:string = "約會"; public _whrer:string = ""; public _todo:string = ""; } class Boy extends egret.Sprite { public constructor() { super(); } public invite() { var engagement:MyEvent = new MyEvent(MyEvent.DATE); //注冊事件 engagement._whrer = "MacDonald"; engagement._todo = "have Dinner"; this.dispatchEvent(engagement); //發布事件 } } class Girl extends egret.Sprite { public constructor() { super(); } public receive(evt:MyEvent) { console.log(evt.target.name + " send engagement."); console.log(evt._todo + " in " + evt._whrer); } }
事件優先級 - 多個事件到來時優先響應哪一個?- priority
public addEventListener(type:string, listener:Function, thisObject:any, useCapture:boolean = false, priority:number = 0)