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;
}
}
}
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;
}
}
}
相关文章推荐
- windows游戏编程<一>了解消息事件模型
- 经典软件设计模型 - 事件驱动模型
- 【javascript总结】javascript的IE事件和DOM事件模型
- [置顶] NB多项式事件模型、神经网络、SVM之函数/几何间隔——斯坦福ML公开课笔记6
- javascript计算器之DOM事件模型-----浏览器兼容问题
- Javascript 事件模型
- redis-网络事件模型(scoket)
- nginx事件模型小结
- 很幽默的讲解六种Socket IO模型 Delphi版本(自己Select查看,WM_SOCKET消息通知,WSAEventSelect自动收取,Overlapped I/O 事件通知模型,Overlapped I/O 完成例程模型,IOCP模型机器人)
- 异步事件模型
- .Net中的事件(Event)编程模型
- linux epoll事件模型详解
- Flash 平台技术的优化(四) 事件模型与回调
- 仿net事件委托的java事件模型实现
- Java学习之 Java事件模型
- 异步事件分发模型设计一
- Android事件处理模型
- opnet之加强mm1模型之删除事件
- 深入浅出话窗体(一)——窗体事件模型(上)
- Javascript事件模型系列(三)jQuery中的事件监听方式及异同点