**** 一定一定,在 loading的时候, 执行下这个方法。
EventMgr.getInstance();
1.单例模式
/**
* 单例模式基类
*/
export default class SingletonMgr {
static getInstance<T extends {}>(this: new () => T): T {
if (!(<any>this).__instance){
(<any>this).__instance = new this();
}
return (<any>this).__instance;
}
public static destroyInstance<T extends {}>(this: new () => T): void {
if ((<any>this).__instance){
(<any>this).__instance = null;
}
}
}
2. 脚本
import SingletonMgr from "./SingletonMgr";
export default class EventMgr extends SingletonMgr {
/**
* 全局事件
*/
public static event: cc.EventTarget = null;
constructor() {
super();
this.initialize();
}
private initialize(): void {
EventMgr.event = new cc.EventTarget();
}
//一下是全局事件
static eventEmit(key: string, data?: any) {
cc.game.emit(key, data);
}
static eventOn(key: string, callback: Function, target?: any) {
cc.game.on(key, callback, target);
}
static eventOff(key: string, callback?: Function, target?: any) {
cc.game.off(key, callback, target);
}
}
3. 使用方法
1. 在相应界面,监听和移除一定要有,他俩是一对的。(一般是。onshow的时候 监听, onclosed的时候移除)
// 监听事件
EventMgr.eventOn(ENUM_EventMgr.Item_Sell, this.onEventItemSell, this);
// 移除事件
EventMgr.eventOff(ENUM_EventMgr.Item_Sell, this.onEventItemSell, this);
// 事件回调方法
onEventItemSell(gdItem: GDItem) {
// 参数是,你抛消息,抛什么就收什么。
}
2. 抛消息
// 抛事件
EventMgr.eventEmit(ENUM_EventMgr.Item_Sell, this.gdItem);