cocos2d-x中CCCallFunc系列动作

来源:互联网 发布:vb.net 十秒后跳转 编辑:程序博客网 时间:2024/05/18 02:42
   今天复习了一下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
原创粉丝点击