egretカスタムイベント

3515 ワード

最近egretのチュートリアルを見て、チュートリアルに基づいて簡単な成語の大挑戦のゲームを実現して、中間の使用する部分に対していくつか総括して教材と異なって、私はボタンがイベントをクリックした後の処理に対してdispatchの1つのカスタムイベントを採用して、それからGameSceneの中でこのイベントを監視してまずカスタムのイベントはegretから継承する必要があります.Event、コンストラクション関数には、イベントタイプ、bubblesイベントフローのバブル方式、cancelableイベントをキャンセルできるかどうかが必要です.
class ChangeEvent extends egret.Event{
    public static data = "wordchange";
    public static answer = "answerchange";
    public num: number;
    public index: number;
    public constructor(type: string,bubbles: boolean = false,cancelable: boolean = false) {
        super(type,bubbles,cancelable);
    }
}

dispatchこのイベントはまずイベントを作成する必要があります.ここではイベントEventのcreateメソッドを使用して、イベントをイベントプールに追加し、複数回の作成を減らし、最後にreleaseというイベントが必要です.ここでは、イベントの傍受と送信が同じオブジェクトでなければ傍受できないため、親ノードを使用してこのイベントを傍受する理由を説明します.複数のサブコントロールに対して同じメッセージを配布する場合は、親ノードで傍受できます.
this.parent.dispatchEvent(changeEvent);
    protected OnClick(e: egret.TouchEvent){
        //var word = e.target;
        console.log("OnClick:",this.wordLabel.text);
        //this.visible = false;
        //var changeEvent = new ChangeEvent(ChangeEvent.data);
        var changeEvent = egret.Event.create(ChangeEvent,ChangeEvent.data);
        changeEvent.num = this.index;
        this.parent.dispatchEvent(changeEvent);
        console.log(this.parent.hasEventListener(changeEvent.data));
    }

次に、リスニングが必要なインタフェースAddlistenerでリスナーを追加します.
this.addEventListener(ChangeEvent.data,this.Change,this);