通過(m_pSelectorTarget->*m_pCallFunc)();可以看到回調函數不包含參數
CCCallFuncN也是執行對應的回調函數,其中回調函數帶一個參數。一般使用靜態成員函數create創建實例,create聲明如下:
static CCCallFuncN* create ( CCObject * pSelectorTarget,
SEL_CallFuncN selector
)
回調函數通過execute方法執行,CCCallFuncN中的execute的實現如下:
void CCCallFuncN::execute() {
if (m_pCallFuncN) {
(m_pSelectorTarget->*m_pCallFuncN)(m_pTarget);
}
if (m_nScriptHandler) {
CCScriptEngineManager::sharedManager()->getScriptEngine()->executeCallFuncActionEvent(this, m_pTarget);
}
}
通過(m_pSelectorTarget->*m_pCallFuncN)(m_pTarget);可以看到回調函數包含一個參數。
CCCallFuncND也是執行對應的回調函數,其中回調函數可帶兩個參數。一般使用靜態成員函數create創建實例,create聲明如下:
static CCCallFuncND* create ( CCObject * pSelectorTarget,
SEL_CallFuncND selector,
void * d
)
回調函數通過execute方法執行,CCCallFuncND中的execute的實現如下:
void CCCallFuncND::execute() {
if (m_pCallFuncND) {
(m_pSelectorTarget->*m_pCallFuncND)(m_pTarget, m_pData);
}
}
通過(m_pSelectorTarget->*m_pCallFuncND)(m_pTarget, m_pData);可以看到回調函數包含兩個參數。
testCallFunc.h中代碼
class testCallFunc : public CCLayer
{
protected:
CCSprite* sprite1;
CCSprite* sprite2;
CCSprite* sprite3;
public:
virtual void onEnter();
void callback1();
void callback2(CCNode* sender);
void callback3(CCNode* sender, void* data);
};
testCallFunc.cpp中代碼
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- 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);
}>setPosition(ccp( s.width/4*1,s.height/2));
addChild(label);
}
void testCallFunc::callback2(CCNode* pSender)
{
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)
{
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。