熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法。

cc.eventManager有两种注册监听器的方式,一种是原生事件,例如

cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyReleased: function(keyCode, event) { if (keyCode == cc.KEY.back) { cc.director.end(); } }}, this);

addListener接受的是一个object。键盘事件、触摸事件等都是这样的。往往这个object的结构比较麻烦,每个事件都不一样。

另外是customEvent,例如已经接触过的进入后台和恢复事件:

    //进入后台 cc.eventManager.addCustomListener(cc.game.EVENT_HIDE, function(event){ cc.log("cc.game.EVENT_HIDE!"); }); //恢复显示 cc.eventManager.addCustomListener(cc.game.EVENT_SHOW, function(event){ cc.log("cc.game.EVENT_SHOW"); });

这两个事件就比较简单,类似js和flash事件,只需要一个简单字符串+一个函数即可。

参数event是这样的结构:

其中userData是dispatch的时候附带的。

触发自定义事件的方式,也跟js和flash一致:

cc.eventManager.dispatchCustomEvent("xxxxxevent", {a:1,b:2});

通过这个dispatch就能得到上边图片所示的内容。

但removeListener就多少有点不方便了。对自定义事件,只支持全部移除

removeCustomListeners: function (customEventName)

不能单独移除某一个。

看官方的例子,貌似基本都不移除listener,可能js几个object内存并不显著吧。如果内存管理非常敏感的话,可能就需要自己写一个了。

/**
* Created by kenkozheng on 2014/8/20.
*/
var EventDispatcher = function() {this.init();
};
var p = EventDispatcher.prototype;p._listenerMap = null;p.init = function(){this._listenerMap = new Object();
};/**
*
* @param event String
* @param callback function
*/
p.addListener = function(event, callback){if(!callback || !event)return;var listenerList = this._listenerMap[event];if(!listenerList)listenerList = this._listenerMap[event] = new Array();for (var i = 0; i < listenerList.length; i++) {if(listenerList[i] == callback)return;}listenerList.push(callback);
};p.removeListener = function(event, callback){if(!callback || !event)return;var listenerList = this._listenerMap[event];if(listenerList){for (var i = 0; i < listenerList.length; i++) {if(listenerList[i] == callback){listenerList.splice(i, 1);return;}}}
};/**
*
* @param event String
*/
p.dispatchEvent = function(event){if(this._listenerMap[event]){var listeners = this._listenerMap[event].slice();for (var i = 0; i < listeners.length; i++) {listeners[i]();}}
}

cocos2d-js 自定义事件监听派发相关推荐

  1. SpringBoot--->>>原理解析-->>自定义事件监听组件

    自定义事件监听组件 在上面了解了在程序启动时准备工作和启动过程会扫描 spring.factories 中的配置,拿到要启动的各种配置.这也说明可以自己自定义一些程序启动时会自动扫描的文件,然后在 r ...

  2. JS的事件监听与委托机制

    JS的事件监听机制 小故事: 很久以前有个叫Netscape的姑娘,她制订了Javascript的一套事件驱动机制(即事件捕获) 后来又有一个叫"IE"的小子,这孩子比较傲气,他认 ...

  3. html js按钮事件监听,JS监听事件

    对象 - JS监听事件 ¶ 作者:KK 发表日期:2016.2.21 在准备讲解后面的window对象之前,这里将话题转回来事件这里 平时咱们在一个元素里加个onclick属性,属性值写JS代码,这样 ...

  4. js: 添加事件监听addEventListener、移除事件监听removeEventListener

    文档 https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener https://developer.m ...

  5. js滚动条事件监听addEventListener、removeEventListener不生效

    //移除监听需要满足 需要移除的事件类型必须是一样的, 比如: click 需要从目标事件移除的 EventListener 函数必须和 addEventListener 中注册的是同一个, 也就是说 ...

  6. cocos2d JS 自定义事件分发器(接收与传递数据) eventManager

    简而言之,它不是由系统自动触发,而是人为的干涉 较多情况用于传递数据 var _listener1 = cc.EventListener.create({event: cc.EventListener ...

  7. html 自定义js,js 自定义事件

    js怎么自定义事件,并能让用on事件监听 你这个问题全部内容应该是如下吧: 在视频播放的时候,能够用on监听事件的触发,如下: player.on('pause',function(){ consol ...

  8. SpringBoot重点详解--事件监听

    目录 自定义事件监听 Springboot 启动事件监听 Springboot 事件监听为 Bean 与 Bean 之间的消息通信提供支持:当一个 Bean 做完一件事以后,通知另一个 Bean 知晓 ...

  9. EventTarget.addEventListener()事件监听

    文章目录 EventTarget.addEventListener()的意义和原理 什么是事件监听 addEventListener()的原理 addEventListener()的语法 addEve ...

最新文章

  1. Python速度提升
  2. linux+xampp搭建WordPress个人网站过程详解
  3. Leetcode 350. 两个数组的交集 II 解题思路及C++实现
  4. ubuntu10.10编译qtopia-2.2.0 问题总结及分析
  5. 【总有一些东西要弄清】——说说面试时一系列的CSS问题
  6. 基于SOA的图书商城系统分析
  7. 步骤一:入门linux基础/01Linux简介和安装/003Linux系统的多面性
  8. (八)用于人脸识别的Web API
  9. linux之crontab使用技巧
  10. combing string
  11. sharepoint2013爬xls文件:Error initializing IFilter for extension的解决方案
  12. Mysql数据库自动备份
  13. vue打包篇-分析包数据再进行CDN配置图片文件压缩等优化
  14. 计算机读不出来u盘装系统,电脑重装系统后识别不了U盘解决方法
  15. 中泰资管天团丨如何用量化复制巴菲特?
  16. 轻松在线制作各种Logo标志
  17. hdu5238 calculator (线段树+crt)
  18. 压缩20M文件从30秒到1秒的优化过程
  19. 主流计算机戴尔笔记本电脑,主流价位好机器 戴尔灵越一体机23 5348
  20. 软件测试五年工作经验自我评价,测试工程师自我评价_测试工程师自我评价范例...

热门文章

  1. 打包tomcat没有xml文件_Spring Boot 项目打包 War 并部署到 Tomcat
  2. Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
  3. 华为服务器引入清空外部配置文件,云服务器还原配置文件
  4. 校园音乐点歌平台的设计与开发 微信小程序 推荐点歌 java 开发
  5. Swift 教學:如何使用iOS Charts API 製作漂亮的圖表
  6. 19.04.02笔记
  7. Spring-boot+Vue = Fame 写blog的一次小结
  8. Netty 之 Zero-copy 的实现(下)
  9. 十分钟成为 Contributor 系列 | 为 TiDB 重构 built-in 函数
  10. springmvc和mybatis整合关键配置