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;
}
}
}