egret事件模型

// 定义了一个事件派发类
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;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值