Cocos Creator 监听和发射事件(官方文档摘录)

监听事件

事件处理是在节点(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,用于绑定响应函数调用者。以下两种调用方式, 效果上是相同的:

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

// 使用第三个参数
function (event) {
  false;
},this);

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

关闭监听

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

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

function () {
    'Hello World');
  },onEnable: 'foobar',sans-serif; Box-sizing: border-Box; font-weight: bold;">this._sayHello,sans-serif; Box-sizing: border-Box; font-weight: bold;">this);
  },ondisable: this.node.off(发射事件我们可以通过两种方式发射事件emitdispatchEvent。两者的区别在于,后者可以做事件传递。 我们先通过一个简单的例子来了解emit事件:

'say-hello',sans-serif; box-sizing: border-box;">function (event) {
      console.log(event.detail.msg);
    });
  },start: this.node.emit('Hello,this is Cocos Creator',});
  },});

派送事件上文提到了dispatchEvent方法,通过该方法发射的事件,会进入事件派送阶段。在 Cocos Creator 的事件派送系统中,我们采用冒泡派送的方式。冒泡派送会将事件从事件发起节点,不断地向上传递给他的父级节点,直到到达根节点或者在某个节点的响应函数中做了中断处理event.stopPropagation()

如上图所示,当我们从节点 c 发送事件 “foobar”,倘若节点 a,b 均做了 “foobar” 事件的监听,则 事件会经由 c 依次传递给 b,a 节点。如:

// 节点 c 的组件脚本中
this.node.dispatchEvent( new cc.Event.EventCustom(true) );

如果我们希望在 b 节点截获事件后就不再将事件传递,我们可以通过调用event.stopPropagation()函数来完成。具体方法如下:

// 节点 b 的组件脚本中
function (event) {
  event.stopPropagation();
});

请注意在发送用户自定义事件的时候,请不要直接创建cc.Event对象,因为它是一个抽象类,请创建cc.Event.EventCustom对象来进行派发

事件对象在事件监听回调中,开发者会接收到一个cc.Event类型的事件对象eventstopPropagation就是cc.Event的标准 API,其它重要的 API 包含:

targetcurrentTargetgetTypestopPropagationstopPropagationImmediategetCurrentTargetdetailsetUserDatagetUserData
API 名 类型 意义
type String 事件的类型(事件名)
cc.Node 接收到事件的原始对象
接收到事件的当前对象,事件在冒泡阶段当前对象可能与原始对象不同
Funciton 获取事件的类型
Function 停止冒泡阶段,事件将不会继续向父节点传递,当前节点的剩余监听器仍然会接收到事件
立即停止事件的传递,事件将不会传给父节点以及当前节点的剩余监听器
获取当前接收到事件的目标节点
自定义事件的信息(属于cc.Event.EventCustom
设置自定义事件的信息(属于cc.Event.EventCustom
获取自定义事件的信息(属于cc.Event.EventCustom

完整的 API 列表可以参考cc.Event及其子类的 API 文档。

系统内置事件以上是通用的事件监听和发射规则,在 Cocos Creator 中为cc.Node内置了鼠标、触摸等系统事件,可参考系统内置事件文档

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...