ocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
来源:互联网 发布:金字塔软件异常 编辑:程序博客网 时间:2024/04/29 13:17
CCCallFunc CCCallFuncN CCCallFuncND的区别和使用
CCCallFunc CCCallFuncN CCCallFuncND都用来创建带有回调函数的动作,区别主要在于回调函数是否带有参数
CCCallFunc
CCCallFunc是执行对应的回调函数,其中回调函数不可带参数。一般使用静态成员函数create创建实例,create声明如下:
static CCCallFunc* create(CCObject * pSelectorTarget,SEL_CallFunc selector)
回调函数通过execute方法执行,CCCallFunc中的execute的实现如下:
void CCCallFunc::execute() { if (m_pCallFunc) { (m_pSelectorTarget->*m_pCallFunc)(); }if (m_nScriptHandler) {CCScriptEngineManager::sharedManager()->getScriptEngine()->executeCallFuncActionEvent(this);}}
通过(m_pSelectorTarget->*m_pCallFunc)();可以看到回调函数不包含参数
CCCallFuncN
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
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);可以看到回调函数包含两个参数。
CCCallFunc CCCallFuncN CCCallFuncND实例对比
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->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){ 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);}
转载地址:ocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- ocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中回调函数CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- CCCallFunc CCCallFuncN CCCallFuncND的区别和使用
- CCCallFunc CCCallFuncN CCCallFuncND的区别和使用
- CCCallFunc CCCallFuncN CCCallFuncND的区别和使用
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- 关于CCCallFunc、CCCallFuncN和CCCallFuncND的使用
- 关于CCCallFunc、CCCallFuncN和CCCallFuncND的使用
- cocos2d-x 之 CCCallFunc、CCCallFuncN 、CCCallFuncND区别
- ubuntu10.04 android编译问题
- mysql 基本命令
- 流媒体知识
- iOS7适配遇到的一些问题
- db2 export ,import ,load
- ocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- JavaScript或MyEclipse—如何解决js文件导入到MyEclipse工程后出错?
- 求2数的最大公约数
- 模型指标
- 第十一周上级项目1-调用函数输出星号图(2)
- IntelliSense: PCH 警告: 头停止点不能位于宏或 #if 块中。未生成 IntelliSense PCH 文件。
- leetcode Longest Palindromic Substring Part II
- 字典树(Trie树)
- Java 学习基础第二章之理解面向对象