cocos事件的监听,发射,派送

官方文档https://docs.cocos.com/creator/manual/zh/scripting/events.html

参考
https://blog.csdn.net/nk1212582/article/details/81632049

事件监听
事件处理是在节点(cc.Node)中完成的。

对于组件,可以通过访问节点this.node来注册和监听事件。

监听事件可以通过this.node.on()方法和this.node.once()方法来注册。

发射事件
可以通过两种方式发射事件:emit 和 dispatchEvent。

两者的区别是,dispatchEvent可以做事件传递(冒泡传送)

node.emit(type, detail)
通知所有监听 type 事件的监听器,detail是附加参数

关闭监听
使用node.off(type, callback, target)方法来关闭对应的监听事件

off()方法的参数必须和对应的on()方法的参数一一对应,才能成功关闭

cc.Class({
  extends: cc.Component,
 

    onLoad() {
        this.node.on('say-hello', this._sayHello, this);
    },

    start() {
        //发射事件say-hello,所有注册过事件say-hello的函数都会被触发,say-hello是用户自定义事件
        this.node.emit('say-hello', { msg: 'Hello, this is Cocos Creator', });
    },

    _sayHello(msg) {
        console.log(msg.msg);
    },

    onDestroy() {
        this.node.off('say-hello', this._sayHello, this);
    },
});
 

值得一提的是,on()方法还可以传第三个参数target,用于绑定响应函数的调用者,其用法如下

// 使用函数绑定
this.node.on('mousedown', function ( event ) {
  this.enabled = false;
}.bind(this));
 
// 使用第三个参数
this.node.on('mousedown', function (event) {
  this.enabled = false;
}, this);

两种用法的效果一样

node.once(type, callback, target)

once()方法与on()方法基本一样,只有一点不同:正如其名,once()注册的事件只能监听一次,在监听函数响应后就会自动关闭监听事件

派送事件
通过dispatchEvent()方法发射的事件,会进入事件派送阶段。

CC的事件派送系统采用冒泡派送的方式。

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

event.stopPropagation()的节点。
在这里插入图片描述

如上图所示,但我们从节点c发送事件“footbar”,如果节点a, b均监听了事件“footbar”,则事件会经由c依次传递给b、a节点

节点c中事件发射代码为

this.node.dispatchEvent(new cc.Event.EventCustom('foobar', true));

如果想在b节点截获事件,可以调用event.stopPropagation()方法来实现,具体如下

// 节点 b 的组件脚本中
this.node.on('foobar', function (event) {
  event.stopPropagation();
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烧仙草奶茶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值