cocos creator之自定义事件

概念

cocos creator中的自定义事件类是cc.Event.EventCustom,类似于观察者模式

作用

能使发送者发送某一信号后,接受者能执行某一动作,能降低发送者和接受者之间的耦合度

场景假设

为方便后续的讨论,假设节点O上有两个脚本组件a、b,并假设在脚本a中监听脚本b中的事件

事件注册

脚本a中的代码

onLoad () {
    this.node.parent.on("CustomName", function (event) {
        let data = event.getUserData();
        cc.log("已经获得:", data);
    });
}

注意这里是在脚本a上绑定的节点的父节点,也就是节点O上注册监听事件。为什么要这么做呢?后面解释原因

例外,CustomName是自定义事件的事件名,后面的function (event)是回调函数,在接收到事件CustomName时被自动调用

事件分发

脚本b中的代码

onTouchStart(event){
    let testEvent = new cc.Event.EventCustom("CustomName", true);//创建自定义事件
    testEvent.setUserData("abc");    //设置自定义事件中包含的数据
    this.node.dispatchEvent(testEvent);    //用节点分发事件
}

注意,这里要通过脚本b上绑定的节点来分发事件

cc.Event.EventCustom

cc.Event.EventCustom是自定义事件类,其构造函数是constructor(type: string, bubbles: boolean)

其中type是自定义事件的标签,用来标识自己,bubbles标识是否进行冒泡传送

冒泡派送:事件从发起节点开始,不断迭代地向父节点传递,直到遇到根节点或者在响应函数中进行了中断处理的节点。

取消监听

脚本a中的代码

this.node.parent.off("CustomName");    //取消掉了对事件CustomName的监听

重要规律

分发事件后,只有本节点或者本节点的祖先节点能接受到事件分发的信号

因此如果在脚本a中用this.node.on来注册对事件CustomName的监听,是无法监听到事件CustomName的,必须使用其父节点来注册监听

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零幺_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值