cocos creator -實(shí)現(xiàn)事件監(jiān)聽-On與Emit的實(shí)現(xiàn)

摘要

CocosCreator 有著內(nèi)置的事件系統(tǒng),我們用起來也很是方便。那么我們自己如何簡單的實(shí)現(xiàn)一個(gè) EventManager 呢?本文通過一個(gè)小例子帶你學(xué)習(xí)。

  • 使用版本
    CocosCreator 版本 2.3.3
  • 明確目標(biāo)
    我們要做一個(gè)事件管理模塊,實(shí)現(xiàn)事件的監(jiān)聽方法 on,取消方法 off,事件發(fā)送 emit。


事件數(shù)據(jù)類型

  • 首先,我們要想好事件用什么存儲。選擇用 Map,則需要一個(gè)事件名稱,類型 string,還有就是一個(gè)對象,存放 callback 以及調(diào)用者 target。
  • 寫成單例模式
/**
 * 事件數(shù)據(jù)接口
 */
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;
    }
    /**
     * 事件監(jiān)聽
     * @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});
    }
    /**
     * 事件發(fā)送
     * @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);
    }
    /**
     * 取消事件監(jiān)聽
     * @param eventName 
     */
    public off(eventName:string){
        if(!this.eventsMap.has(eventName)){
            console.warn(`$(eventName) 事件不存在`);
            return;
        }
        this.eventsMap.delete(eventName);
    }
}

項(xiàng)目地址 https://gitee.com/zhouhongpeng/MyEventManager

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容