• Cocos2dx 3.0 提高篇(二) 事件回调


     

    Cocos2dx 3.0 提高篇(二) 事件回调

    分类: cocos2d-x学习笔记 287人阅读 评论(1) 收藏 举报

    3.0 后的事件回调函数接口都不一样了,例如按钮的menu_selector(),update的 schedule_selector等,都已成明日黄花。而新的回调接口,则由四个CC_CALLBACK取代。

    下面先举例一些不同的调用方法:

    1、按钮:CC_CALLBACK1

    1. 2.0  
    2. MenuItemImage* item =MenuItemImage::create("","",this,menu_selector(HelloWorld::callback));  
    3. 3.0  
    4. auto item = MenuItemImage::create("","",CC_CALLBACK1(HelloWorld::callback,this));  


    看到这里有人可能会问,如果要更改按钮的回调函数怎么做呢?如果你继续用setTarget();这个接口,那可行不通了。

    3.0里用setCallback()  替代了 setTarget(Object *rec, SEL_MenuHandler selector),参数如下:

    setCallback(const ccMenuCallback&callback);


    这里有看到一个新鲜的词:

    ccMenuCallback,这货是什么碗糕?哈哈哈哈,如果你问我,那你就问错人了!!!我也只能告诉你大概是怎么个用法,嘿嘿。

    首先,从setTarget()和setCallback()里的参数变化可以看出,ccMenuCallback 实际上就包含了Object *rec, SEL_MenuHandler selector这俩参数,举个例子:

    1. 2.0  
    2. Item->setTarget(this,menu_selector(HelloWorld::callback));  
    3. 3.0  
    4. Item->setCallback(CC_CALLBACK1(HelloWorld::callback,this));  

    恩,就是这样子,怎么感觉说的都没啥深度,噗,有点模仿“笨木头”的语气呀。

    2、action 回调 CC_CALLBACK0 ;CC_CALLBACK1

    先举例:

    1)回调函数不带参数的情况

    1. 2.0  
    2. CallFunc::create(this,callfunc_selector(ActionSequence2::callback1));  
    3. void ActionSequence2::callback1(){};  
    4. 3.0  
    5. CallFunc::create(CC_CALLBACK_0(ActionSequence2::callback1,this)),  
    6. void ActionSequence2::callback1(){};  

    2)回调函数带参数的情况

    1. 2.0  
    2. CCSequence* seq = CCSequence::create(  
    3. <span style="white-space:pre">  </span>MoveBy::create(2.0f,ccp(150,0)),  
    4. <span style="white-space:pre">  </span>CallFuncN::create(this,callfuncN_selector(ActionCallFunc::callback)),  
    5. <span style="white-space:pre">  </span>NULL);  
    6. 3.0  
    7.  auto action = Sequence::create(  
    8.         MoveBy::create(2.0f, Point(150,0)),  
    9.         CallFuncN::create( CC_CALLBACK_1(ActionCallFuncN::callback, this)),  
    10.         NULL);  

    小小的总结下:CC_CALLBACK0是回调不带参数的回调函数,CC_CALLBACK1是回调有参数的回调函数。

    既然说到了action,顺便再说下3.0里Callfunc的新的用法(之前的版本应该没有吧…)

    auto action1 = CallFunc::create(

                    [&](){

                        auto s =Director::sharedDirector()->getWinSize();

                        auto label =LabelTTF::create("called:lambda callback", "Marker Felt", 16);

                        label->setPosition(ccp(s.width/4*1,s.height/2-40));

                        this->addChild(label);

                    }  );

    注意红色的部分,以前动作回调都是要新写一个回调函数,这样子虽然问题不大,但如果用到回调的地方多了,而且回调的代码也就几行而已,那之前的做法就有点受不了,现在好了,可以直接把动作执行完要回调的函数代码直接写到创建里来,是不是方便多了。

    3、触摸回调,CC_CALLBACK2 这个打算下一篇重点讲,所以这个先列下用法。

    1. auto touchListener = EventListenerTouchOneByOne::create();  
    2. touchListener->setSwallowTouches(true);  
    3.    
    4. touchListener->onTouchBegan = CC_CALLBACK_2(MyMenu::onTouchBegan, this);  
    5. touchListener->onTouchMoved = CC_CALLBACK_2(MyMenu::onTouchMoved, this);  
    6. touchListener->onTouchEnded = CC_CALLBACK_2(MyMenu::onTouchEnded, this);  
    7. touchListener->onTouchCancelled = CC_CALLBACK_2(MyMenu::onTouchCancelled, this);  
    8.    
    9. _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);  

    恩,目前也就了解这些了。以后再继续补吧。

    转载请注明源地址:http://blog.csdn.net/start530/article/details/18216679

  • 相关阅读:
    第四章
    第三章
    第二章
    实验5-2: 编制程序,输入m、n(m≥n≥0)后,计算下列表达式的值并输出。 要求将计算阶乘的运算编写作函数fact(n),函数返回值的类型为float
    作业
    多人电费
    单人电费
    圆柱体积
    圆面积
    第七章
  • 原文地址:https://www.cnblogs.com/AlanShearer/p/3524643.html
Copyright © 2020-2023  润新知