cocos2d-x的几个回调函数

在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); //自定义一个CCLabelTTF
36.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* callFuncNSp
57.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(1360)));
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* title
80.CCLabelTTF* title = (CCLabelTTF*)data;
81.title->runAction(CCRepeatForever::create(CCJumpBy::create(1, ccp(00), 302)));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值