• cocos2dx js 自定义监听事件 cocos引擎还封装了一个自定义事件,下面我们将把一个节点对象通过自定义监听事件传入自定义回调事件中,并进行相应的函数调用。 代码 //自定义监听事件 customListener : function...

    cocos2dx js 自定义监听事件

    cocos引擎还封装了一个自定义事件,下面我们将把一个节点对象通过自定义监听事件传入自定义回调事件中,并进行相应的函数调用。
    

    代码

    //自定义监听事件
    customListener : function () {
    
        var myListener = cc.EventListener.create({
            event    :cc.EventListener.CUSTOM,
            target   :this,
            eventName:"myListener",//最好参考cocos将此参数定义为一个常量
            callback : function (event) {
    
                //获取Bear实例对象
                var target = event.getUserData();
    
                //方法调用
                target.bearJump();
                target.bearEat();
            }
        });
        cc.eventManager.addListener(myListener,1);
    },
    
    //按钮点击触发
    eventButtonClick : function(sender,type){
    
        switch (type){
            case ccui.Widget.TOUCH_ENDED:
    
                //1.定义数据(在这里是Bear实例对象)
                var bear = new Bear();
    
                //2.创建自定义事件
                var event = new cc.EventCustom("myListener");
    
                //3.设置数据
                event.setUserData(bear);
    
                //4.分发事件
                cc.eventManager.dispatchEvent(event);
    
                break;
            default:
                break;
        }
    }
    

    小熊

    var Bear = cc.LayerColor.extend({
    
        ctor : function () {
    
            this._super();
        },
    
        bearJump : function () {
    
            cc.log("小熊跳。。。");
        },
    
        bearEat : function () {
    
            cc.log("小熊吃鱼。。。");
        },
    });
    

    打印

    Cocos2d-JS v3.15
    小熊跳。。。
    小熊吃鱼。。。
    
    展开全文
  • 熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法。 cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManager.addListener({ event: cc.EventListener....

    熟悉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的时候附带的。

     

    触发自定义事件的方式,也跟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-x3.x自定义事件

    2019-07-19 21:17:39
    -- 自定义事件 -- 监听: local eventDispatcher = self:getEventDispatcher();--self为继承Node的对象 local function handleBuyGoods(event) cclog("handleBuyGoods") end local listener = cc....

    -- 自定义事件
    -- 监听:

    local eventDispatcher = self:getEventDispatcher();--self为继承Node的对象
    
    local function handleBuyGoods(event) 
    cclog("handleBuyGoods")
    end
    local listener = cc.EventListenerCustom:create("HandleKey.kDidBuyGoods", handleBuyGoods)
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)

     

    -- 广播:

    local eventDispatcher = cc.Director:getInstance():getEventDispatcher()
    local event = cc.EventCustom:new("HandleKey.kDidBuyGoods")
    eventDispatcher:dispatchEvent(event)

     --事件机制入口:http://www.cnblogs.com/haogj/p/3784896.html

    转载于:https://www.cnblogs.com/qianwang/p/6239168.html

    展开全文
  • cocos2dx–自定义事件监听器–控制游戏分数 ...1:创建自定义监听事件 //自定义事件监听器 //监听敌人死亡的消息--加分 //1:添加自定义事件监听器 _eventDispatcher->addCustomEventListener...

    cocos2dx–自定义事件监听器–控制游戏分数

    这个主要是来通过监听事件来控制敌人的分数,比如敌机死亡,就发一条消息过来,然后这边接受到消息了,就会调用加分的方法,对分数的文本重新设置

    1:创建自定义监听事件

    //自定义事件监听器
       //监听敌人死亡的消息--加分
       //1:添加自定义事件监听器
       _eventDispatcher->addCustomEventListener("onEnemyDeath", [this](EventCustom* event)
       {
    	   Enemy* enemy=(Enemy*) event->getUserData();//传递的数据:enemy*//将void* 转换成Enemy*
    
    	  
    	   //加分
    	   this->addScore(30);
       }
       );//1:消息的名字,2:CC_CALLBACK
    
       //2:在对应的位置分发消息
       //分发敌机死亡的消息:enemy:EnemyDestructionAction
       //_eventDispatcher->dispatchCustomEvent("onEnemyDeath");
    	//_eventDispatcher->dispatchCustomEvent("onEnemyDeath",this);
    
    
      // 3:必须在适当的时候移除自定义监听器:可以写在析构函数里
       //移除自定义监听器:HelloWorld:~HelloWorld
      // _eventDispatcher->removeCustomEventListeners("onEnemyDeath");
    

    2:加分的方法(自己可以创建一个)

    //分数加分方法
    void HelloWorld::addScore(int add_score)
    {
    	//分数累加
    	score += add_score;
    
    	//修改文本的内容:设置文本的内容setString
    	scoreText->setString(std::to_string(score));
    }
    

    3:事件分发(我这里是敌机死亡发送信息过来)

    //事件分发器:敌人死亡加分
    	_eventDispatcher->dispatchCustomEvent("onEnemyDeath", this);
    

    4:必须在适当的时候移除自定义监听器:可以写在析构函数里

    //移除自定义监听器
    	_eventDispatcher->removeCustomEventListeners("onEnemyDeath");
    
    展开全文
  • Cocos2d-x之自定义事件

    2020-02-28 16:15:00
    除了使用系统定义的事件之外,我们还可以自定义一些事件,它们就不是由系统来触发了,而是由我们自己写的代码来触发,如: _listener = EventListenerCustom::create("game_custom_event1", [=](EventCustom* event)...

    系统定义的事件,如触摸事件、键盘事件等都是被系统自动触发的。除了使用系统定义的事件之外,我们还可以自定义一些事件,它们就不是由系统来触发了,而是由我们自己写的代码来触发,如:

    _listener = EventListenerCustom::create("game_custom_event1", [=](EventCustom* event){
        std::string str("Custom event 1 received, ");
        char* buf = static_cast<char*>(event->getUserData());
        str += buf;
        str += " times";
        statusLabel->setString(str.c_str());
    });
    
    _eventDispatcher->addEventListenerWithSceneGraphPriority(_listener, this);
    

    上面自定义了事件监听器,还有一个响应的方法,并被添加到了事件分发器event
    dispatcher中。触发方式如下:

    static int count = 0;
    ++count;
    
    char* buf[10];
    sprintf(buf, "%d", count);
    
    EventCustom event("game_custom_event1");
    event.setUserData(buf);
    
    _eventDispatcher->dispatchEvent(&event);
    

    上面这个例子创建了一个EventCustom对象,并设置它的UserData。然后通过 _eventDispatcher->dispatchEvent(&event)进行手动分发。这就触发了之前定义的事件处处理程序。处理程序被立即调用,因此可以使用本地堆栈变量作为用户数据。

    展开全文
  • cocos2dx 在C++或lua中派发自定义事件,并lua中响应自定义事件
  • cocos2d 自定义事件

    2018-03-19 14:48:13
    首先实现消息自定义事件这个类local GameEvent = class("GameEvent") GameEvent.EVENT_CHANGE_LANGUAGE = "change_language" function GameEvent.addEventListener(event_name,func,target) --...
  • 1、cocos2d-x的基本运行环境搭建就不介绍了,自己去网上搜索 2、本贴发表精灵监听点击事件的示例 创建精灵后,要响应自定义点击事件,最好是把监听事件加在精灵上,在层上监听也可以满足要求,不过得遍历当前层上...
  • cocos2dx-lua 自定义事件
  • --自定义事件的回调函数 local function eventCustomListener1(event) local str = "Custom event 1 received, "..event._usedata.." times" statusLabel1:setString(str) end --添加自定义事件 loc
  • cocos2dx-lua 自定义事件

    2018-11-26 14:32:45
    降低模块间的耦合度,本质是观察者模式的应用,通过增加监听器,使事件响应函数的调用分散在各个对象自身内部,当增加和减少一个事件响应函数时,只需要增加或删除相应对象内的代码,降低了模块间的耦合度。...
  • cocos2dx 自定义事件

    2017-12-05 17:13:25
    cocos2dx里Director类里有一个_...对于EventDispatcher,只要是这个类的对象发送(通过dispatchEvent发送)的事件(EventCustrom对象),该对象的监听器(EventListenerCustom)就可以监听(通过addEventListene
  • cocos2d-x如何让自己自定义的精灵能够动态地添加监听事件
  • cocos2d-x 3.0 出来已经好久了,也已经用3.0写了几个小游戏,感觉3.0的事件触发机制太赞了,随这里总结一下,也算是对知识的一种回忆和加深理解。 3.0的事件分发机制中,需要也仅仅需要通过创建一个事件监听器来...
  • 事件监听器的5种类型 触摸响应事件 (EventListenerTouch) 键盘响应事件 (EventListenerKeyboard) 鼠标响应事件 (EventListenerMouse) 自定义响应事件 (EventListenerCustom) 加速响应事件 ...
  • cocos2dx 的自定义事件

    2018-05-18 21:52:20
    欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • 之前使用的是cocos2d-x,用惯了notificationCenter,用了creator,发现没有这个东西,只能用js默认的on和emit用来设置事件监听和发送事件,但是,系统自带的on和emit有一个缺点,就是只能在当前脚本on和emit事件,这...
  • cocos2d-js】监听双击

    2015-10-12 14:43:59
    自定义鼠标监听类,添加双击效果第一次发文,而且我自学cocos2d-js才一个月多,写的不好请见谅。因为最近无聊,想写个扫雷的小游戏,但是扫雷需要监听单击、双击、右键,显然cocos2d-js是没有的,所以这里我自定义了...
  • 最近使用cocos2d-lua 做一个游戏项目,很多地方使用到消息广播机制,使用引擎提供的 eventproxy 方法,感觉写法繁琐,而且不太方便,所以结合前人经验做了一个管理消息分发的公共类,使用很方便。 但是不适合多个...
  • 同济大学软件学院每个学期会要求学生独立或者组队完成一个大项目,于是2016年大项目是用cocos2d-x这款引擎制作一个自己的游戏。 有幸能和<stroke>大神</stroke>组到了一起,形成了两人小分队。 C++语言...
1 2 3 4 5 ... 20
收藏数 2,056
精华内容 822