美文网首页
简单的CocosCreator自定义全局事件

简单的CocosCreator自定义全局事件

作者: zzqlb | 来源:发表于2019-05-08 17:24 被阅读0次

    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"});
    

    相关文章

      网友评论

          本文标题:简单的CocosCreator自定义全局事件

          本文链接:https://www.haomeiwen.com/subject/disvoqtx.html