简单的CocosCreator自定义全局事件

    技术2022-07-13  82

    creator 中的事件:监听和发射事件 但是这样并不能完全满足我们的需求,我们通常希望在各个地方自由的派发事件,同时所有的监听都能收到派发出来的事件, 所以实现了个EventCenter,简单的实现了功能。记录一下: 代码:

    window.EventCenter = { _events: {}, EventType : { TEST_EVENT: "TEST_EVENT", }, AddListener : function(eventname,callback,target){ if(this._events[eventname] == undefined) { this._events[eventname] = []; } this._events[eventname].push({ callback: callback, target: target, }); }, RemoveListener : function(eventname,callback,target){ var handlers = this._events[eventname]; for (var index = handlers.length - 1; index >= 0; index--) { var handler = handlers[index]; if(target == handler.target && callback.toString() == handler.callback.toString()) { this._events[eventname].splice(index, 1); }; } }, RemoveAllListener : function(eventname) { if(this._events[eventname] != undefined) { var handlers = this._events[eventname]; for (var index = 0; index < handlers.length; index++) { handlers[index] = null; } } }, ResetAllListener : function() { for (const key in this._events) { if (this._events.hasOwnProperty(key)) { delete this._events[key]; } } }, dispatchEvent : function(eventname,data){ if(this._events[eventname] != undefined) { var handlers = this._events[eventname]; for (var index = 0; index < handlers.length; index++) { var handler = handlers[index]; handler.callback.call(handler.target,data); } } }, }

    调用:

    //注册事件 EventCenter.AddListener(EventCenter.EventType.TEST_EVENT,this.TestCallBack,this); TestCallBack: function(data){ cc.log("data : "data.data); }, //一定要记得移除事件 EventCenter.RemoveListener(EventCenter.EventType.TEST_EVENT,this.GainFallBallCallBack,this); //派发事件,第二个参数可以是需要传递的数据 EventCenter.dispatchEvent(EventCenter.EventType.TEST_EVENT); EventCenter.dispatchEvent(EventCenter.EventType.TEST_EVENT,{“data”:"data"});
    Processed: 0.018, SQL: 9