转载于 http://www.cnblogs.com/kenkofox/p/3926797.html
熟悉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的时候附带的。
看官方的例子,貌似基本都不移除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 自定义事件监听派发全部内容,希望文章能够帮你解决cocos2d-js 自定义事件监听派发所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)