cocos2d-js的自定义事件的两种创建方法

自定义事件是当其它事件不满足用户的时候可以自己定义。像传递值或者对象。

我们都知道创建一个监听器无非就是两个步骤:一是创建Listener,二是添加到eventManage上。但是EventCustom多了一个需要自己调度

dispatchCustomEvent或者dispatchEvent.

第一种方法:

首先是创建自定义Listener:

this.listener = cc.EventListener.create({
            event: cc.EventListener.CUSTOM,   //事件类型---自定义
            eventName: "event_custom_name",   //事件名称
            callback: function (event) {
                cc.log("event = "+event.getUserData());
            }
        });
然后是添加到eventManage上:

cc.eventManager.addListener(this.listener,1);
官方文档是对后面那个1说是自定义事件时候的固定优先级

最后是派发,也就是调用

 var event = new cc.EventCustom("event_custom_name");
 event.setUserData("123");
 cc.eventManager.dispatchEvent(event);

实例:

var EventCustomLayer = cc.LayerColor.extend({
    listener: null,
    ctor: function () {
        this._super();
        var item = new cc.MenuItemFont("onclick",this.onclick);
        var menu = new cc.Menu(item);
        this.addChild(menu);
        this.listener = cc.EventListener.create({
            event: cc.EventListener.CUSTOM,   //事件类型---自定义
            eventName: "event_custom_name",   //事件名称
            callback: function (event) {
                cc.log("event = "+event.getUserData());
                event.getUserData().logHellow();
            }
        });
        cc.eventManager.addListener(this.listener,1);
    },
    onclick: function () {
        var layer = new OtherLayer();
        var event = new cc.EventCustom("event_custom_name");
        event.setUserData(layer);
        cc.eventManager.dispatchEvent(event);
    }
});
var OtherLayer = cc.LayerColor.extend({
    ctor: function () {
        this._super();
    },
    logHellow: function(){
        cc.log("Hellow");
    }
});
var EventCustomScene = cc.Scene.extend({
    ctor: function () {
        this._super();
        var layer = new EventCustomLayer();
        this.addChild(layer);
    }
})
例子通过自定义事件把OtherLayer对象用event.setUserData传递到this.listener中然后用event.getUserData得到对象。并且调用对象中的方法
最后输出:




第二种:可以携带多个参数的自定义事件

添加自定义事件:

cc.eventManager.addCustomListener("event_custom_name", function (event) {
            cc.log("hello");
            cc.log("b = "+ event.getUserData().b);
            event.getUserData().a.logHellow()
        });

派发事件:

cc.eventManager.dispatchCustomEvent("event_custom_name",{a:new OtherLayer(),b:"csdn"});
第二个参数是用大括号括起来、可以自定义个多个参数,并且参数是可以是任意类型的值或者对象。在接收事件的地方可以用event.getUserData().加参数名调用。如:event.getUserData().b

例子:

var EventCustomLayer = cc.LayerColor.extend({
    listener: null,
    ctor: function () {
        this._super();
        var item = new cc.MenuItemFont("onclick",this.onclick);
        var menu = new cc.Menu(item);
        this.addChild(menu);
        cc.eventManager.addCustomListener("event_custom_name", function (event) {
            cc.log("hello");
            cc.log("b = "+ event.getUserData().b);
            event.getUserData().a.logHellow()
        });
    },
    onclick: function () {
        cc.eventManager.dispatchCustomEvent("event_custom_name",{a:new OtherLayer(),b:"csdn"});
    }
});
var OtherLayer = cc.LayerColor.extend({
    ctor: function () {
        this._super();
    },
    logHellow: function(){
        cc.log("Hello World");
    }
});
var EventCustomScene = cc.Scene.extend({
    ctor: function () {
        this._super();
        var layer = new EventCustomLayer();
        this.addChild(layer);
    }
})

输出的结果是:

删除自定义事件:

移除所有监听者
removeCustomListeners(customEventName)
移除有同样事件名字的所有自定义监听者
removeListener(listener)
移除一个监听者。
removeListeners(listenerType, recursive)
移除有相同事件监听者类型的所有监听者,或者一个节点的所有监听者



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值