• 【Cocos2d-x 3.0 基础系列一】 各类回调函数写法汇总


    一、button回调


    1. Lambda 表达式,C++11 Lambda 赋予了Cocos2d-x 3.0创建回调函数的灵活性。

    auto itemNor	=	Sprite::create("CloseNormal.png");
    auto menuItem	=	MenuItemSprite::create(itemNor,nullptr,nullptr,[](Ref* sender)
    {
    	log("show this msg.");
    });
    auto menu	=	Menu::create(menuItem,nullptr);
    this->addChild(menu);
    

    2.宏定义bind方式创建回调.
    auto itemNor	=	Sprite::create("CloseNormal.png");
    auto menuItem	=	MenuItemSprite::create(itemNor,nullptr,nullptr,CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
    auto menu	=	Menu::create(menuItem,nullptr);
    this->addChild(menu);
    
    void HelloWorld::menuCloseCallback(Ref* pSender)
    {
    	log("show this msg.");
    }

    3.MenuToggleItem回事件回调

    auto toggleSpNor	=	Label::createWithSystemFont("OPEN_BAME","WRYH",65);
    auto toggleSpSel	=	Label::createWithSystemFont("CLOSE_BAME","WRYH",65);
    auto toggleSpDis	=	Label::createWithSystemFont("DISABLE_BAME","WRYH",65);
    auto toggleItemNor	=	MenuItemLabel::create(toggleSpNor);
    auto toggleItemSel	=	MenuItemLabel::create(toggleSpSel);
    auto toggleItemDis	=	MenuItemLabel::create(toggleSpDis);
    
    auto toggleItem		=	MenuItemToggle::createWithCallback(CC_CALLBACK_0(HelloWorld::toggleCallBack,this),toggleItemNor,toggleItemSel,nullptr);
    
    auto toggleMenu	=	Menu::create(toggleItem,nullptr);
    this->addChild(toggleMenu);
    
    void HelloWorld::toggleCallBack()
    {
    	log("Do something when toggle did touched..");
    }



    二、定时器回调

    /*周期定时调用*/
    this->schedule(SEL_SCHEDULE(&HelloWorld::gameStep));
    /*倒计是定时调用一次*/
    this->scheduleOnce(SEL_SCHEDULE(&HelloWorld::gameStep),3.0f);
    /*周期定时调用update需重写update方法*/
    this->scheduleUpdate();
    
    void HelloWorld::gameStep(float dt)
    {
    	log("on timer...");
    }

    三、触屏事件回调

    auto touchEvt		    =	cocos2d::EventListenerTouchOneByOne::create();
    touchEvt->onTouchBegan	    =	CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
    touchEvt->onTouchMoved	    =	CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
    touchEvt->onTouchEnded      =	CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
    touchEvt->onTouchCancelled     =	CC_CALLBACK_2(HelloWorld::onTouchCancelled,this);
    
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchEvt,this);
    
    bool HelloWorld::onTouchBegan(cocos2d::Touch* touch,cocos2d::Event* evt)
    {
    	log("Touch began..");
    	return true;
    }
    void HelloWorld::onTouchMoved(cocos2d::Touch* touch,cocos2d::Event* evt)
    {
    	log("Touch moved..");
    }
    void HelloWorld::onTouchEnded(cocos2d::Touch* touch,cocos2d::Event* evt)
    {
    	log("Touch leave..");
    	Director::getInstance()->getEventDispatcher()->removeEventListenersForTarget(this);
    }
    void HelloWorld::onTouchCancelled(cocos2d::Touch* touch,cocos2d::Event* evt)
    {
    	log("Something was happend , touch event is cut..");
    }

    四、动作回调


    auto callBack		=	CallFunc::create(CC_CALLBACK_0(HelloWorld::actionCallBack,this));
    this->runAction(callBack);
    
    void HelloWorld::actionCallBack()
    {
    	log("Do something when action did finished..");
    }

    五、自己定义事件回调


    auto callBack		=	[](EventCustom* evt)
    							{
    								log("catch an custom event!!");
    							};
    cocos2d::EventListenerCustom* customEvt	=	EventListenerCustom::create("ME_CUSTOM_EVENT_TEST",callBack);
    //注冊自己定义事件(处理优先级为12)
    Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(customEvt,12);
    
    //抛出自己定义事件
    Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("ME_CUSTOM_EVENT_TEST");





  • 相关阅读:
    mysql创建用户后无法访问数据库的问题
    mysql索引
    hadoop安装
    MySQL工作原理
    MySQL数据库优化的八种方式
    FLOAT 和 DOUBLE区别
    在C++中定义常量
    C++变量类型
    FTP主动模式、被动模式(转)
    FtpClient ReplyCode 意义及 FtpClientHelper辅助类
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7208328.html
Copyright © 2020-2023  润新知