美文网首页
监听和发射事件

监听和发射事件

作者: kzc爱吃梨 | 来源:发表于2020-07-13 17:14 被阅读0次

监听事件

事件处理是在节点(cc.Node)中完成的。对于组件,可以通过访问节点 this.node 来注册和监听事件。监听事件可以通过 this.node.on() 函数来注册,方法如下:

cc.Class({
  extends: cc.Component,

  properties: {
  },

  onLoad: function () {
    this.node.on('mousedown', function ( event ) {
      console.log('Hello!');
    });
  },
});

值得一提的是,事件监听函数 on 可以传第三个参数 target,用于绑定响应函数的调用者。以下两种调用方式,效果上是相同的:

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

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

除了使用 on 监听,我们还可以使用 once 方法。once 监听在监听函数响应后就会关闭监听事件。

关闭监听

当我们不再关心某个事件时,我们可以使用 off 方法关闭对应的监听事件。需要注意的是,off 方法的参数必须和 on 方法的参数一一对应,才能完成关闭。

我们推荐的书写方法如下:

cc.Class({
  extends: cc.Component,

  _sayHello: function () {
    console.log('Hello World');
  },

  onEnable: function () {
    this.node.on('foobar', this._sayHello, this);
  },

  onDisable: function () {
    this.node.off('foobar', this._sayHello, this);
  },
});

发射事件

发射事件有两种方式:emitdispatchEvent。两者的区别在于,后者可以做事件传递。我们先通过一个简单的例子来了解 emit 事件:

cc.Class({
  extends: cc.Component,

  onLoad () {
    // args are optional param.
    this.node.on('say-hello', function (msg) {
      console.log(msg);
    });
  },

  start () {
    // At most 5 args could be emit.
    this.node.emit('say-hello', 'Hello, this is Cocos Creator');
  },
});

事件参数说明

在 2.0 之后,我们优化了事件的参数传递机制。 在发射事件时,我们可以在 emit 函数的第二个参数开始传递我们的事件参数。同时,在 on 注册的回调里,可以获取到对应的事件参数。

cc.Class({
  extends: cc.Component,

  onLoad () {
    this.node.on('foo', function (arg1, arg2, arg3) {
      console.log(arg1, arg2, arg3);  // print 1, 2, 3
    });
  },

  start () {
    let arg1 = 1, arg2 = 2, arg3 = 3;
    // At most 5 args could be emit.
    this.node.emit('foo', arg1, arg2, arg3);
  },
});

需要说明的是,出于底层事件派发的性能考虑,这里最多只支持传递 5 个事件参数。所以在传参时需要注意控制参数的传递个数。

相关文章

  • 监听和发射事件

    监听事件 事件处理是在节点(cc.Node)中完成的。对于组件,可以通过访问节点 this.node 来注册和监听...

  • (八)监听和发射事件

    (八)监听和发射事件 监听事件 事件处理是在节点(cc.Node)中完成的。对于组件,可以通过访问节点 this....

  • uniapp全局监听事件的大坑...

    监听全局的自定义事件发射消息:uni.$emit(eventName,OBJECT)监听消息:uni.$on(ev...

  • 简单的CocosCreator自定义全局事件

    creator 中的事件:监听和发射事件但是这样并不能完全满足我们的需求,我们通常希望在各个地方自由的派发事件,同...

  • 下单流程解耦新方案-你知道Spring事件监听机制吗

    一、Spring事件监听介绍 Spring对事件监听是通过事件类型、事件类型监听和事件发布器3个部分来完成的 上面...

  • day08

    监听器和邮箱服务 第1章 监听器介绍 监听器:监听事件源,根据事件源上发生事件,做出相应的处理。 1.2 监听机制...

  • Android之常用Listener监听器

    常用Listener监听器 ListView事件监听: EditText事件监听: RadioGroup事件监听:...

  • (十二)给组件绑定原生事件

    本节知识点 给组件绑定原生事件 代码实现 因为自定义组件要想绑定事件必须监听子组件发射过来的事件。而要是用原生的就...

  • 通过事件总线来传递事件

    使用方法如下: 1.在A.vue页面发射事件 2.在B.vue页面中的created方法中监听事件 前提:需要给b...

  • 细谈Spring的事件监听机制

    一、事件监听的基本原理 事件监听机制和发布订阅机制是很相似的:发布了一个事件后,监听该类型事件的所有监听器会触发相...

网友评论

      本文标题:监听和发射事件

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