CCCallFunc CCCallFuncN CCCallFuncND都用来创建带有回调函数的动作,区别主要在于回调函数是否带有参数。
实例:
void testCallFunc::onEnter()
{
//CCCallFunc的使用
CCFiniteTimeAction* action = CCSequence::create(
CCMoveBy::create(2, ccp(200,0)),
CCCallFunc::create(this, callfunc_selector(testCallFunc::callback1)),
NULL);
//CCCallFuncN的使用
CCFiniteTimeAction* action2 = CCSequence::create(
CCScaleBy::create(2 , 2),
CCFadeOut::create(2),
CCCallFuncN::create(this, callfuncN_selector(testCallFunc::callback2)),
NULL);
//CCCallFuncNC的使用
CCFiniteTimeAction* action3 = CCSequence::create(
CCRotateBy::create(3 , 360),
CCFadeOut::create(2),
CCCallFuncND::create(this, callfuncND_selector(testCallFunc::callback3), (void*)0xbebabeba),
NULL);
sprite1->runAction(action);
sprite2->runAction(action2);
sprite3->runAction(action3);
}
void testCallFunc::callback1()//当前层调用此函数
{
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*1,s.height/2));
addChild(label);
}
void testCallFunc::callback2(CCNode* pSender)//当前层调用此函数。pSender是调用CCCallFuncN创建的动作的节点
{
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*2,s.height/2));
addChild(label);
}
void testCallFunc::callback3(CCNode* pTarget, void* data)//当前层调用此函数。pSender是调用CCCallFuncND创建的动作的节点,data是CCCallFuncND的函数create的第三个参数的数据指针值
{
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*3,s.height/2));
addChild(label);
}