cocos creator -实现事件监听-On与Emit的实现

2020-05-09  本文已影响0人  pengGO

摘要

CocosCreator 有着内置的事件系统,我们用起来也很是方便。那么我们自己如何简单的实现一个 EventManager 呢?本文通过一个小例子带你学习。

事件数据类型

/**
 * 事件数据接口
 */
interface EventData{
    callback : Function,
    target:any
}
/**
 * 单例模式
 */
export class MyEventManager {

    private static mInstance: MyEventManager = null;
    /**
     * 事件存储 Map
     */
    private eventsMap:Map<string , EventData> = new Map();

    public static instance(): MyEventManager {
        if (this.mInstance == null) {
            this.mInstance = new MyEventManager();
        }
        return this.mInstance;
    }
    /**
     * 事件监听
     * @param eventName 事件名字
     * @param callback 返回方法
     * @param target 
     */
    public on(eventName:string , callback:Function , target:any){
        if(this.eventsMap.has(eventName)){
            console.warn(`$(eventName) 事件已存在 , 做了覆盖处理`);
        }
        this.eventsMap.set(eventName , {callback , target});
    }
    /**
     * 事件发送
     * @param eventName 
     * @param data 
     */
    public emit(eventName:string , data:any){
        if(!this.eventsMap.has(eventName)){
            console.warn(`$(eventName) 事件不存在`);
            return;
        }
        const {callback , target} = this.eventsMap.get(eventName);
        callback.call(target , data);
    }
    /**
     * 取消事件监听
     * @param eventName 
     */
    public off(eventName:string){
        if(!this.eventsMap.has(eventName)){
            console.warn(`$(eventName) 事件不存在`);
            return;
        }
        this.eventsMap.delete(eventName);
    }
}

项目地址 https://gitee.com/zhouhongpeng/MyEventManager

上一篇下一篇

猜你喜欢

热点阅读