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的,必须使用其父节点来注册监听

你可能感兴趣的:(cocos,creator)