在CCCallFunc系列动作的4个类中,CCCallFunc调用的方法不包含参数,CCCallFuncN调用的方法包含一个CCNode*类型的参数,表示执行动作的对象。CCCallFuncND调用的方法包含两个参数,不仅有一个节点参数,还有一个自定义参数(CCNode*与void*)。CCCallFuncO调用的方法则只包含一个CCObject*类型的参数。
实际上,CCCallFunc系列动作的后缀"N"表示Node参数,指的是执行动作的对象,"D"表示Data参数,指的是用户自定义的数据,"O"表示对象,指的是一个用户自定义的CCObject参数。在不同的情况下,我们可以根据不同的需求来选择不同的CCCallFunc动作。
#include "HelloWorldScene.h"02.#include "SimpleAudioEngine.h"03. 04.using
namespace cocos2d;05.using
namespace CocosDenshion;06. 07.CCScene*
HelloWorld::scene()08.{09.CCScene
*scene = CCScene::create();10.HelloWorld
*layer = HelloWorld::create();11.scene->addChild(layer);12.return scene;13.}14.bool
HelloWorld::init()15.{16.if (
!CCLayer::init() )17.{18.return false;19.}20.CCSize
size = CCDirector::sharedDirector()->getWinSize();21. 22.//CCCallFunc
调用的方法不包含参23.CCSprite*
callFuncSp = CCSprite::create("Icon.png");24.callFuncSp->setPosition(ccp(size.width/4,
size.height*0.5));25.this->addChild(callFuncSp);26.callFuncSp->runAction(CCCallFunc::create(this,
callfunc_selector(HelloWorld::callback1)));27. 28.//CCCallFuncN
调用的方法包含一个CCNode*类型的参数,表示执行动作的对象。29.CCSprite*
callFuncNSp = CCSprite::create("Icon.png");30.callFuncNSp->setPosition(ccp(size.width/2,
size.height*0.5));31.this->addChild(callFuncNSp);32.callFuncNSp->runAction(CCCallFuncN::create(this,
callfuncN_selector(HelloWorld::callback2)));33. 34.//CCCallFuncND,回调,ND表示CCNode和Data,可以传递对象本身和一个void*类型参数,void*表示可以是任意类型的参数35.CCLabelTTF*
title = CCLabelTTF::create("void*
要传的参数", "Marker
Felt", 16); //自定义一个CCLabelTTF36.title->setPosition(ccp(size.width/4*3,
size.height*0.6));37.this->addChild(title);38. 39.CCSprite*
callFuncNDSp = CCSprite::create("Icon.png");40.callFuncNDSp->setPosition(ccp(size.width/4*3,
size.height*0.5));41.this->addChild(callFuncNDSp);42.callFuncNDSp->runAction(CCCallFuncND::create(this,
callfuncND_selector(HelloWorld::callback3), (void*)title));43. 44. 45.return true;46.}47. 48.void HelloWorld::callback1()49.{50.CCSize
s = CCDirector::sharedDirector()->getWinSize();51.CCLabelTTF
*label = CCLabelTTF::create("callback
1 called", "Marker
Felt", 16);52.label->setPosition(ccp(
s.width/4*1,s.height/3));53.addChild(label);54.}55. 56.//CCNode*
sender为运行动作的它本身也就是CCSprite* callFuncNSp57.void HelloWorld::callback2(CCNode*
sender)58.{59.CCSize
s = CCDirector::sharedDirector()->getWinSize();60.CCLabelTTF
*label = CCLabelTTF::create("callback
2 called", "Marker
Felt", 16);61.label->setPosition(ccp(
s.width/4*2,s.height/3));62.addChild(label);63. 64.//自身做顺时针旋转动作65.sender->runAction(CCRepeatForever::create(CCRotateBy::create(1, 360)));66.}67. 68.//CCNode*
sender也就是CCSprite* callFuncNDSp. void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。69.void HelloWorld::callback3(CCNode*
sender, void*
data)70.{71.CCSize
s = CCDirector::sharedDirector()->getWinSize();72.CCLabelTTF
*label = CCLabelTTF::create("callback
3 called", "Marker
Felt", 16);73.label->setPosition(ccp(
s.width/4*3,s.height/3));74.addChild(label);75. 76.//自身做逆时针旋转动作77.sender->runAction(CCRepeatForever::create(CCRotateBy::create(1,
-360)));78. 79.//void*
data也就是CCLabelTTF* title80.CCLabelTTF*
title = (CCLabelTTF*)data;81.title->runAction(CCRepeatForever::create(CCJumpBy::create(1,
ccp(0, 0), 30, 2)));
643

被折叠的 条评论
为什么被折叠?



