熟悉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. [问题贴]mui.openWindow+自定义事件监听操作让alert()执行两次

    仔细看,Alert函数执行了两次 共两个页面:index.html和detail.html, detail.html为按钮设置了自定义事件监听(newsId),触发alert. 在index.html ...

  2. js添加事件监听的方式与this

    js添加事件监听与this js添加事件监听的方式与this 在标签中调用自定义函数 DOM0级事件处理程序 DOM2级事件处理程序 this 代表谁? js添加事件监听的方式与this <di ...

  3. JS通用事件监听函数

    JS通用事件监听函数 版本一 //把它全部封装到一个对象中 var obj={ readyEvent:function (fn){ if(fn==null){ fn=document; } var o ...

  4. Java Spring 自定义事件监听

    ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...

  5. JS的事件监听机制

    很久以前有个叫Netscape的姑娘,她制订了Javascript的一套事件驱动机制(即事件捕获) 后来又有一个叫“IE”的小子,这孩子比较傲气,他认为“凭什么我要依照你的规则走”,于是他又创造了一套 ...

  6. JS之事件监听

    一 如果事件监听类似于如下写法,则最终只会执行最后一个事件监听,其他监听都会被覆盖掉. window.onload=funtion(){console.log(1);}; window.onload= ...

  7. js实现事件监听与阻止监听传播

    监听事件: 使用attachEvent(用于IE)和addEventListener(用于谷歌.火狐)时则可以实现多个事件处理函数的调用 1.下面都是dom对象的方法,可以实现一种事件绑定多个事件处理 ...

  8. Node.js之事件监听和发送

    演示事件的发送和监听 const events = require("events"); function Account() { this.balance = 0; events ...

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

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

随机推荐

  1. 低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment

    在ActionBar中添加Tab是很有用的技巧.在support V7库的支持下,我们几乎可以用和之前一样的方式来添加Tab,对于Tab来说,我们可以和MenuItem一样,给他定义自己的视图.我这里 ...

  2. C# WebBrowser控件使用整理

    一.简介 WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装. 托管包装使您可以在 Windows 窗体客户端应用程序中显示网页. 使用WebBrowser 控件, ...

  3. Photoshop 使用阈值调整色阶

    1. 阈值原理 阈值的定义其实就是“临界点”,即过了这个临界点是一种情况(比如黑色),没有超过这个临界点是另外一种情况(比如白色),所以图像上只有黑.白两种情况出现.临界点的值由你定义: 阈值实际应用 ...

  4. 秒懂,Java 注解 (Annotation)你可以这样学

    转自: https://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片. 这处图片引自老罗的博客.为了避免不必要的麻烦,首先声明我 ...

  5. Asp.net WebAPi Restful 的实现和跨域

    现在实际开发中用webapi来实现Restful接口开发很多,我们项目组前一段时间也在用这东西,发现大家用的还是不那么顺畅,所以这里写一个Demo给大家讲解一下,我的出发点不是如何实现,而是为什么? ...

  6. ES6 主要的新特性

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  7. 用css3和jQuery制作精美的表单

    用css3和jQuery制作一个简单的精美表单 html代码如下: <span class="title">Mask Your Input Forms and Make ...

  8. [VS2010搭建汇编开发环境win32和x64]

    场景: 1. 虽然使用MASM32也可以编译运行汇编程序,但是既然装了VS2010,它也能支持编译运行汇编吧.不然微软的开发人员难道还不用vs写汇编程序了? http://www.masm32.com ...

  9. Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目

    一.前言 如果还不了解剧情,请返回第3集的剧情          Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...

  10. 利用NATAPP隧道解决微信公众号开发之本地调试难题

    一.问题 众所周知,微信公众号开发需要公网的有效域名和80端口,本机当然互联网是访问不了的.那么我们难道去一个公网的服务器去开发吗?那样是不是太土了. 答案当然是,NO 当然我们在做微信支付的时候,有 ...