Cocos2d-x学习笔记(三)浅析动作类CCAction(2)

时间:2023-02-08 16:19:20

有关CCAction其它动作类简介:

(1)摄像机动作类CCOrbitCamera

 摄像机动作是环绕中心屏幕旋转所形成的动作,其旋转坐标采用球坐标描述。

 Create()函数原型CCOrbitCamera* createfloat,float,float,float,float,float,float),第一个参数表示时间间隔,第二、三个参数分别表示起始半径和过程半径,第四、五个参数分别表示起始Z轴夹角和过程Z轴夹角,第六、七个参数分别表示起始X轴夹角和过程X轴夹角。

(2)基本样条动作:CCCatmullRomToBy)和CCCardinalSplineTo(By)

游戏对象通过一些离散的点模拟出相应的路径,有相应的公式模拟出这条曲线,那就是基本样条了。

1、基本样条路径CCCardinalSplineToBy):

Create()函数原型CCCardinalSplineTo* crete(float,CCPointArray*,float),第一个参数表示时间间隔,第二个参数表示点数组,第三个参数表示拉力系数。前面说过,一个是相对量,一个是绝对量,注意使用相对量时应第一个点最好设置为(0,0),否则会被忽略掉。

2Catmull-Rom样条路径CCCatmullRomToBy),用法类似,只是不需要拉力系数做参数。

(3)缓冲动作类CCActionEase

 在现实运动中,常常需要实现一些加减速效果,缓冲动作可以帮我们实现。主要有指数缓冲、赛因缓冲、跳跃缓冲、弹性缓冲、回震缓冲和基本缓冲六大类。一般第一个参数为缓冲动作,若有2个参数,基本动作的第二个参数为速率,弹性缓冲为震动周期。其基本调用形式为(CCActionInterval*(move->copy()->autorelease()……)

(4)组合动作类CCSequenceCCSpawnCCRepeatCCrepeatForever

 在游戏中,游戏对象有时不只是执行一个动作执行多个动作的动作序列,这时需要用动作组合在一起,用组合动作类可以实现它。

1、动作序列CCSequence

 前面也有提到过,Create()函数参数是由一系列动作及一个以NULL结尾的构成,调用形式一般为CCSequence::crate(ation1,ation2,,NULL);

2、合成动作CCSpawn

 CCSpawn动作使被合成的动作同时进行,其调用方式与动作序列一致。

3、动作重复类CCRepeatCCrepeatForever

 二者可以使动作重复进行,不同之处在于CCRepeat可以在第二个参数定义重复次数,而CCrepeatForever则一直重复。一般调用形式为:

CCRepeat::create((CCFiniteTimeAction*)(seq->copy()->autorelease()),nCount);

CCrepeatForever::create((CCActionInterval*)(seq->copy()->autorelease());

 

(5)跟随动作类CCFollow

 Create()函数原型CCFollow* create(CCNode*,CCRect&),第一参数为要跟随的动作节点(一般为执行动作的精灵类),第二个参数为运动的边界(如果没有传入边界,则视为没有边界)。

运行效果一般为:屏幕跟随精灵的移动而移动。

(6)可调整速度动作类CCSpeed

 Crate()函数原型CCSpeed* create(CCActionInterval*,float),第一个参数表示延时动作(一般为动作序列或合成动作),第二个参数可理解为速率。CCSpeed的成员函数setSpeed()可设置速度,等于1原速,大于1加速,小于1减速。

(7)动作延时类CCDelayTime:

Create()函数原型CCDelayTime* create(float),参数表示间隔时间。动作延时顾名思义延后一段时间执行,可以理解为执行了一段空动作,一般放在动作序列CCSequence中才能看到效果。

(8)改变动作执行对象类CCTargetedAction

Create()函数原型CCTargetedAction.* create(CCNode*,CCFiniteTimeAction*),第一个参数表示执行动作的精灵,第二个参数为精灵执行的动作。当一个精灵执行一个动作序列时,遇到CCTargetedAction对象时会将权限赋给第一个精灵类参数执行其动作。参照代码分析:

CCTargetedAction *t1 = CCTargetedAction::create(m_kathia, jump2);

CCTargetedAction *t2 = CCTargetedAction::create(m_kathia, rot2);

CCSequence* seq = (CCSequence*)CCSequence::create(jump1, t1, rot1, t2, NULL);

CCRepeatForever *always = CCRepeatForever::create(seq);

m_tamara->runAction(always);

当m_tamara执行一系列动作时,遇到t1时动作jump2由精灵m_kathia执行,t2类似。主要目的是改变动作的执行对象。

(9)函数回调动作类CCCallFunc:

 有时候某些动作执行完后,需要执行一些数据上的处理,比如攻击一个敌人,需要处理加减血等,这时需要使用函数回调动作。

Create()函数原型CCCallFunc* (CCObject*,SEL_CallFunc),第一个参数为拥有回调函数的对象,第二个参数为相应选择器获得相应函数名称。CCCallFuncN、CCCallFuncND类的使用类似,CCCallFuncND有三个参数,第三个参数是数据对象。