关于动作部分,总的来说使用起来比较简单,创建一个动作,然后让可渲染节点如精灵去执行这个动作即可。cocos2dx提供了很多类型的动作,使用起来也很方便。本节重点介绍动作CCAction的子类之一时间动作:CCFiniteTimeAction:
时间动作又分:瞬时动作(CCActionInstant)和持续动作(CCActionInterval)
瞬时动作:指动作立马执行,不需要持续时间,如位置的瞬移。
持续动作:需要给动作指定持续时间,如从A移动到B,设定3秒移动时长。
瞬时动作
CCSprite* pSprite = CCSprite::create("HelloWorld.png");//创建一个精灵
pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(pSprite, 0);
//通常用父类CCActionInstant来接收不同的子类对象实现多态
CCActionInstant* it1 = CCFlipX::create(true);//创建x轴翻转动作
CCActionInstant* it2 = CCFlipY::create(true);//创建y轴翻转动作
pSprite->runAction(it2);//执行动作it2
CCActionInstant* it3 = CCPlace::create(ccp(200,200));//放置动作,实现位置瞬移
pSprite->runAction(it3);
CCActionInstant* it4 = CCHide::create();//隐藏动作,等同于设置setVisible(false)
CCActionInstant* it5 = CCShow::create();//显示动作,等同于设置setVisible(true)
pSprite->runAction(it4);
CCActionInstant* it6 = CCToggleVisibility::create();//可见开关动作,即原来是隐藏的话改为显示,显示改为隐藏
pSprite->runAction(it6);
//重要的函数回调动作CCCallFunc,它有三个子类,CCCallFuncN、CCCallFuncND、CCCallFuncO,它们之间只是回调函数的参数不同
CCActionInstant* it7 = CCCallFunc::create(this,callfunc_selector(MyClass::callBack1));//callback1自定义的函数,用来处理动作执行到此处该做的事,无参数
CCActionInstant* it8 = CCCallFuncN::create(this,callfunc_selector(MyClass::callBack2));//callback2带参数(CCNode* pSender),参数是执行此动作CCNode对象
CCActionInstant* it9 = CCCallFuncND::create(this,callfunc_selector(MyClass::callBack3));//callback3带参数(CCNode* pSender,void* data),data是关联数据
CCActionInstant* it10 = CCCallFuncO::create(this,callfunc_selector(MyClass::callBack4));//callback4带参数(CCObject* obj),任何对象都可调用此动作
持续动作
持续动作时动作系统中最为复杂的动作分类,包含了大量的动作子类。持续动作类中的每一种从类名上看通常都分为两中,“To”类型和“By”类型,to类型就是一次性指定从哪个状态到哪个状态,并指定动作持续时间,如5秒内从(0,0)移动到(200,200);而by类型是指定每一帧状态的该变量,如每一帧移动(-10,10):x轴反方向移动10,y轴正方向移动10。
动作种类着实很多,而且使用起来也较为相似,所以直接给一个链接做参考,里面列出了所有动作的使用,包括特效动作: cocos2dx常见的46中+22中动作详解