cocos2d-js 自定义事件监听派发
熟悉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 自定义事件监听派发相关推荐
- SpringBoot--->>>原理解析-->>自定义事件监听组件
自定义事件监听组件 在上面了解了在程序启动时准备工作和启动过程会扫描 spring.factories 中的配置,拿到要启动的各种配置.这也说明可以自己自定义一些程序启动时会自动扫描的文件,然后在 r ...
- JS的事件监听与委托机制
JS的事件监听机制 小故事: 很久以前有个叫Netscape的姑娘,她制订了Javascript的一套事件驱动机制(即事件捕获) 后来又有一个叫"IE"的小子,这孩子比较傲气,他认 ...
- html js按钮事件监听,JS监听事件
对象 - JS监听事件 ¶ 作者:KK 发表日期:2016.2.21 在准备讲解后面的window对象之前,这里将话题转回来事件这里 平时咱们在一个元素里加个onclick属性,属性值写JS代码,这样 ...
- js: 添加事件监听addEventListener、移除事件监听removeEventListener
文档 https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener https://developer.m ...
- js滚动条事件监听addEventListener、removeEventListener不生效
//移除监听需要满足 需要移除的事件类型必须是一样的, 比如: click 需要从目标事件移除的 EventListener 函数必须和 addEventListener 中注册的是同一个, 也就是说 ...
- cocos2d JS 自定义事件分发器(接收与传递数据) eventManager
简而言之,它不是由系统自动触发,而是人为的干涉 较多情况用于传递数据 var _listener1 = cc.EventListener.create({event: cc.EventListener ...
- html 自定义js,js 自定义事件
js怎么自定义事件,并能让用on事件监听 你这个问题全部内容应该是如下吧: 在视频播放的时候,能够用on监听事件的触发,如下: player.on('pause',function(){ consol ...
- SpringBoot重点详解--事件监听
目录 自定义事件监听 Springboot 启动事件监听 Springboot 事件监听为 Bean 与 Bean 之间的消息通信提供支持:当一个 Bean 做完一件事以后,通知另一个 Bean 知晓 ...
- EventTarget.addEventListener()事件监听
文章目录 EventTarget.addEventListener()的意义和原理 什么是事件监听 addEventListener()的原理 addEventListener()的语法 addEve ...
最新文章
- Python速度提升
- linux+xampp搭建WordPress个人网站过程详解
- Leetcode 350. 两个数组的交集 II 解题思路及C++实现
- ubuntu10.10编译qtopia-2.2.0 问题总结及分析
- 【总有一些东西要弄清】——说说面试时一系列的CSS问题
- 基于SOA的图书商城系统分析
- 步骤一:入门linux基础/01Linux简介和安装/003Linux系统的多面性
- (八)用于人脸识别的Web API
- linux之crontab使用技巧
- combing string
- sharepoint2013爬xls文件:Error initializing IFilter for extension的解决方案
- Mysql数据库自动备份
- vue打包篇-分析包数据再进行CDN配置图片文件压缩等优化
- 计算机读不出来u盘装系统,电脑重装系统后识别不了U盘解决方法
- 中泰资管天团丨如何用量化复制巴菲特?
- 轻松在线制作各种Logo标志
- hdu5238 calculator (线段树+crt)
- 压缩20M文件从30秒到1秒的优化过程
- 主流计算机戴尔笔记本电脑,主流价位好机器 戴尔灵越一体机23 5348
- 软件测试五年工作经验自我评价,测试工程师自我评价_测试工程师自我评价范例...
热门文章
- 打包tomcat没有xml文件_Spring Boot 项目打包 War 并部署到 Tomcat
- Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
- 华为服务器引入清空外部配置文件,云服务器还原配置文件
- 校园音乐点歌平台的设计与开发 微信小程序 推荐点歌 java 开发
- Swift 教學:如何使用iOS Charts API 製作漂亮的圖表
- 19.04.02笔记
- Spring-boot+Vue = Fame 写blog的一次小结
- Netty 之 Zero-copy 的实现(下)
- 十分钟成为 Contributor 系列 | 为 TiDB 重构 built-in 函数
- springmvc和mybatis整合关键配置