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

编程之家收集整理的这篇文章主要介绍了cocos2d-js 自定义事件监听派发编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载于 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是这样的结构:

Image(35)

其中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 自定义事件监听派发所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群
编程之家官方2群
编程之家官方3群
编程之家官方4群

相关文章

猜你在找的Cocos2d-x相关文章

操作步骤 1、创建cocos2d-x工程 2、新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#define __SCENE1_H__#in
开发环境:OS(WINDOWS 8.1 X64 企业版) cocos2d-x 2.2.1 vs2010 想给vs安装上cocos的模版,执行InstallWizardForVS2010.js,老是提示
https://www.cnblogs.com/JiaoQing/p/3906780.html 四个响应函数 1 EventListenerPhysicsContact* evContact = EventListenerPhysicsContact::create();//创建一个物理世界的碰撞事件 2 evContact->onContactBegin = [](PhysicsCo
转载于 http://www.cnblogs.com/kenkofox/p/3926797.html 熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法。 cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManager.addListener({ event: cc.EventListener.KEY
公共资源加载,缓存retain;防止被自动销毁 2. 数字滚动递增;用于得奖后,总金币跳动增加 3. 四舍五入显示 金币数 4.   5.  6. 加载csv 配置文件
title Map 使用box2d var sfloors = this.tiledMap.getObjectGroup(‘Special_Floor‘).getObjects(); //此处获取对象层 for (let i = 0, l = sfloors.length; i < l; i++) {   let sfloorsgNode = sfloors[i];   let compoent
摘要: 对在quick-cocos2d-x上实现的资源加密方法的补充 前篇: quick-cocos2d-x图片资源加密 让quick-cocos2d-x支持加密的plist文件   通过前篇的修改,我们已经能够在Windows平台的player,以及Android上使用加密的常见格式(png、jpg等)的图片资源了。不过,在MAC上的player,以及IOS上,加载资源时调用的是另外的代码,所以
首先将存放图片最外层文件夹命名为resources    changeBj: function(){     var url = ‘globalUI/video/gVideoPlayClick‘;     var _this = this; cc.loader.loadRes(url,cc.SpriteFrame,function(err,spriteFrame)     {         _t
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注