cocos2d-js 自定义事件监听派发

cocos2d-js 自定义事件监听派发,第1张

概述熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法。 cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyReleased:

熟悉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,255); line-height:1.5!important">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 = if(ListenerList)    {        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();        var i = 0; i < Listeners.length; i++) {            Listeners[i]();        }    }}
总结

以上是内存溢出为你收集整理的cocos2d-js 自定义事件监听派发全部内容,希望文章能够帮你解决cocos2d-js 自定义事件监听派发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1083781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存