您的位置:首页 > 其它

egret事件模型

2017-05-31 12:04 127 查看
// 定义了一个事件派发类

class Dispatcher extends egret.EventDispatcher {

    static lock: boolean = true;

    private static _instance: Dispatcher;

    public constructor() {

        if (Dispatcher.lock) throw "please use ins()";

        super();

    }

    // 注意此处是public static, this指向Dispatcher类, 而不是它的实例

    // 因此, _instance必须定义为静态成员才能获取

    public static get ins(): Dispatcher {

        if (this._instance == null || this._instance == undefined) {

            Dispatcher.lock = false;

            this._instance = new Dispatcher();

            Dispatcher.lock = true;

        }

        return this._instance;

    }

}

// 自定义事件

class GameEvent extends egret.Event {

    public constructor(type: string, data?: any, bubbles: boolean=false, cancelable: boolean=false) {

        super(type, bubbles, cancelable, data);

    }

}

// 自定义约会事件字符串列表

class DateEventType {

    static DATE: string = 'date';

    static KISS: string = 'kiss';

    static WATCH_MOVIE: string = 'watch_movie';

}

// BOY

class Boy extends egret.Sprite {

    public constructor() {

        super();

        this.childrenCreated();

    }

    protected childrenCreated(): void {

        let dateEvent: number = Math.floor(Math.random() * 3);

        console.log(dateEvent);

        switch (dateEvent) {

            case 0:

                Dispatcher.ins.dispatchEvent(new GameEvent(DateEventType.DATE, 0));

                break;

            case 1:

                Dispatcher.ins.dispatchEvent(new GameEvent(DateEventType.KISS, 1));

                break;

            case 2:

                Dispatcher.ins.dispatchEvent(new GameEvent(DateEventType.WATCH_MOVIE, 2));

                break;

        }

    }
}

////入口文档类

// 事件模型

class Main extends egret.DisplayObjectContainer {

    public constructor() {

        super();

        this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToSatge, this);

    }

    private onAddToSatge(): void {

        Dispatcher.ins.addEventListener(DateEventType.DATE, this.onDate, this);

        Dispatcher.ins.addEventListener(DateEventType.KISS, this.onDate, this);

        Dispatcher.ins.addEventListener(DateEventType.WATCH_MOVIE, this.onDate, this);

        let boy: Boy = new Boy();

    }

    private onDate(e: GameEvent): void {

        switch (e.data) {

            case 0:

                console.log('date');

                break;

            case 1:

                console.log('kiss');

                break;

            case 2:

                console.log('watch_movie');

                break;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  egret 事件模型