简单的CocosCreator自定义全局事件
2019-05-08 本文已影响0人
zzqlb
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"});