cocos2d-x中CCCallFunc系列动作

    今天复习了一下CCCallFunc的用法,觉得这个系列的动作非常方便灵活,是动作中必须学习的部分。这个系列的函数本质也是cocos2d-x内置的动作类,像其他任何动作类一样可以由CCNode执行runaction。
    CCCallFunc系列函数包括CCCallFunc、 CCCallFuncN、 CCCallFuncND、 CCCallFuncO。这4个函数的末尾分别代表了目标回调函数的参数类型。
CCCallFunc------目标函数无参数
CCCallFuncN-----目标函数带一个CCNode*(执行动作的对象)参数
CCCallFuncND----目标函数带2个参数,分别是CCNode* 和Data(用户的自定义数据)
CCCallFuncO-----目标函数带一个CCObject*参数

用法就是像普通的动作一样实例化一个动作对象然后让一个节点去runaction这个动作。

CCDelayTime* delay = CCDelayTime::create(2);
CCCallFuncN* func = CCCallFuncN::create(this,callfuncN_selector(ThemeScene::moveEnd));
this->runAction(CCSequence::create(delay,func,NULL));

void ThemeScene::moveEnd(CCNode* node)
{
FlyingScene* fs = FlyingScene::create();
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(2,fs));
}

    代码的作用是让主题页面停留在屏幕一段时间后自动调用moveEnd();moveEnd()的作用是构造一个新的游戏场景,并用导演替换原来正在运行的场景。
    其实这里也可以用CCCallFunc,因为moveEnd里面并没有对原来的场景做什么调整,而且replaceScene已经帮我们自己释放掉原来的场景,不需要我们手动释放。但是我个人比较喜欢CCCallFunN,觉得牺牲一点点代价可以换来很大的灵活,说不定在以后的某个时刻就需要对原来的场景做某些调整。
    可以看到,这个系列的函数需要对应好参数类型和参数个数。就像我的代码里一样,如果用CCCallFuncN,那么ThemeScene::moveEnd这个函数必须接受一个CCNode* 参数,而且只能是一个。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值