从3.0开始,事件回调函数由原来的schedule_selector和menu_selector等变成CC_CALLBACK_0、CC_CALLBACK_1、CC_CALLBACK_2、CC_CALLBACK_3。
下面先来介绍几个
1. CC_CALLBACK_1
- v2.2
- MenuItemImage* item=MenuItemImage::create("","",this,menu_selector(HelloWorld::callback));
- v3.0
- auto item=MenuItemImage::create("","",CC_CALLBACK_1(HelloWorld::callback,this));
之前可以用setTarget()更改回调函数,3.0可以采用setCallback()
- v2.2
- item->setTarget(this,menu_selector(HelloWorld::callback));
- v3.0
- item->setCallback(CC_CALLBACK_1(HelloWorld::callback,this));
2. 动作action中回调CC_CALLBACK_0、CC_CALLBACK_1
(1)回调函数不带参数用CC_CALLBACK_0
- v2.2
- CallFunc::create(this,callfunc_selector(ActionSequence::callback));
- void ActionSequence::callback(){};
- v3.0
- CallFunc::create(CC_CALLBACK_0(ActionSequence::callback),this);
- void ActionSequence::callback(){};
(2)回调函数带一个参数node,可以用CC_CALLBACK_1
- v2.2
- CCSequence* seq=CCSequence::create(
- MoveBy::create(3,ccp(100,100)),
- CallFuncN::create(this,callfuncN_selector(ActionCallFunc::callback)),
- NULL);
- v3.0
- auto action=Sequence::create(
- MoveBy::create(3,Point(100,100)),
- CallFuncN::create(CC_CALLBACK_1(ActionCallFuncN::callback),this),
- NULL);
顺便提一下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);
- } );
把动作执行完要回调的函数代码直接写到创建里,这样就很方便了。后面还有文章会详细介绍这种用法。