动作的回调方式

之前在学习MoonWarriors时就曾经遇到过一些问题,因为当时没注意回调的几种方式,导致编译器报错。今天看了大牛的文章后,恍然大悟。原址为:http://blog.csdn.net/onerain88/article/details/7437944,记录下来以免以后遇到再次遇到。


动作一般支持3种回调方式

(1).无发送者无数据回调:CCCallFunc,回调函数无参数。示例如下

void HelloWorld::actionCallback()
{
	CCSize winSize = CCDirector::sharedDirector()->getWinSize();

	CCLabelTTF *label = CCLabelTTF::labelWithString("Action Callback!", "Marker Felt", 32);
	label->setPosition(ccp(winSize.width / 2, winSize.height / 2));

	this->addChild(label);
}

(2).有发送者无数据回调:CCCallFuncN  (N是CCNode),有一个参数为发送者信息,示例如下

void HelloWorld::actionCallbackN(CCNode *pSender)
{
	CCSprite *sprite = (CCSprite *) pSender;

	// 回调变红色
	sprite->setColor(ccRED);
}
(3).有发送者有数据回调:CCCallFuncND  (N是CCNode,D是data,是void *类型),有两个参数,一个味发送者信息 ,另一个参数为附带数据。

void HelloWorld::actionCallbackND(CCNode *pSender, void *data)
{
	CCSize winSize = CCDirector::sharedDirector()->getWinSize();

	CCSprite *sprite = (CCSprite *) pSender;

	// 回调变蓝色
	sprite->setColor(ccBLUE);
	
	// 接收回调数据
	CCLabelTTF *label = CCLabelTTF::labelWithString((char *) data, "Marker Felt", 32);
	label->setPosition(ccp(winSize.width / 2, winSize.height / 2));
	this->addChild(label);

	CCLog((char *) data);
}

使用实例如下:
void HelloWorld::actionListen()
{
	CCSize winSize = CCDirector::sharedDirector()->getWinSize();

	CCFiniteTimeAction *action = CCSequence::actions(
		CCMoveBy::actionWithDuration(2.0f, CCPointMake(winSize.width / 2, 0)),
		CCCallFunc::actionWithTarget(this, callfunc_selector(HelloWorld::actionCallback)), NULL);

	CCFiniteTimeAction *actionN = CCSequence::actions(
		CCMoveBy::actionWithDuration(2.0f, CCPointMake(-winSize.width / 2, 0)),
		CCCallFuncN::actionWithTarget(this, callfuncN_selector(HelloWorld::actionCallbackN)), NULL);

	CCFiniteTimeAction *actionND = CCSequence::actions(
		CCMoveBy::actionWithDuration(2.0f, CCPointMake(winSize.width / 2, 0)),
		CCCallFuncND::actionWithTarget(this, callfuncND_selector(HelloWorld::actionCallbackND), (void *) "Callback Data"), NULL);

	oldManSprite->runAction(actionND);
	youngSisterSprite->runAction(actionN);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值