从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);
} );
把动作执行完要回调的函数代码直接写到创建里,这样就很方便了。后面还有文章会详细介绍这种用法。