一、基本概念
行为类的基类是CCAction,任何一种行为都是由它拓展衍变而来的。行为类可以分为三大类:有限次执行类CCFiniteTimeAction、跟随移动类CCFollow和速度行为类CCSpeed,而有限次执行类分为瞬间行为类CCActionInstant和持续行为类CCActionInterval。继承关系如下图所示:有限次执行类是按时间顺序做一系列事情,做完后立即结束行为跟随移动类可以使节点跟随指定的另一个节点移动速度行为类作用是调整行为实例的执行速度,依赖于其它行为,单独存在无意义。
二、动作类解析
CCAction类:
virtual bool isDone(void); //测试一个动作是否完成,如完成返回truevirtual void startWithTarget(CCNode *pTarget); //将结点与行为对象关联,也就是设置动作的承受者。须在动作开始之前完成此设置。virtual void stop(void); //动作完成之后取消节点与行为的关联。不要直接调用这个函数。而应该用target->stopAction(action)。virtual void step(float dt);//动作的间隔时间virtual void update(float time);//动作的执行内容,time的取值在0到1之间;//0 表示动作的开始, 0.5 表示动作的一半, 1 表示运用完毕inline CCNode* getTarget(void)//获取动作的承受者inline void setTarget(CCNode *pTarget) //改变动作的承受者
---------------------------------------------------
CCFiniteTimeAction类:
inline float get/setDuration(void)//获取/设置动作的持续时间
virtual CCFiniteTimeAction* reverse(void); //反向执行一个行为。
CCSpeed类:
get/setSpeed()//获取或设置动作的执行速度bool initWithAction(CCActionInterval *pAction, float fSpeed);//将速度与动作进行关联void setInnerAction(CCActionInterval *pAction)//更改速度与动作的关联CCActionInterval* getInnerAction()//获取当前与速度相关联的动作。
CCFollow类:
bool isBoundarySet(void)//测试边界功能是否打开,如果设置的边界则结点会在边界类运动。void setBoudarySet(bool bValue)//打开或关闭边界功能CCFollow* actionWithTarget(CCNode *pFollowedNode, const CCRect& rect = CCRectZero);//使节点跟随另一个节点移动,参数rect表示跟随者只能在该区域内移动,如超出该范围,则停止跟随。默认没有边界
-------------------------------------------
CCActionInstant类:瞬时动作是立即行动,没有持续时间。其子类如下:
CCCallFunc自定义行为类,效果为调用一个自定义的方法,通过方法的实现来达到自己想要的效果。
CCCallFuncN 效果与CCCallFunc基本相同,只是会将节点对象作为参数传递给被调用的函数。
CCCallFuncND 效果与CCCallFuncN基本相同,只是可以额外传递一个参数给被调用的函数。
CCCallFuncO
*需要特别注意的是,CallFunc虽然是瞬时行为,但这个“瞬时”只体现在它调用函数是在一瞬间完成的,但这个函数的执行可能需要一段时间,就是说CallFunc的行为已经做完了,开始执行序列后面的行为,但被调用的函数还没有完成,此时它们是并行的。
CCFilpX横向翻转类
CCFilpY纵向翻转类
CCHide隐藏结点类
CCShow显示结点类
CCPlace放置结点类
CCReuseGrid类
CCStopGrid类
CCToggleVisibility切换节点可见性类,即当节点可见时设为不可见,不可见时设为可见。
CCBSetSpriteFrame类
CCActionInterval持续行为类:被包含在一段时间内。子类如下:
CCAccelAmplitubeCCAccelDeccelAmplitudeCCActionCameraCCActionEase变速类行为
CCEaseIn 由快至慢CCEaseOut 由慢至快CCEaseInOut 由快至慢再由慢至快CCEaseSineIn 由快至慢CCEaseSineOut 由慢至快CCEaseSineInOut 由快至慢再由慢至快CCEaseExponentianIn 由极快至慢CCEaseExponentianOut 由慢至极快CCEaseExponentianInOut 由极快至慢再由慢至极快
CCActionTweenCCAnimate动画,这个行为有点特殊,它并非继承自CCAction以及CCAction的任何子类,相对来说是个独立的行为。CCAnimation的作用是根据一个帧序列连续切换,形成一个动画,可以说是专门为精灵类准备的。CCBezierBy 使节点按贝塞尔曲线运动。CCBlink 使节点闪烁,可以设置闪烁次数。CCCardinalSplineToCCDeccelAmplitudeCCDelayTime 延迟,即增加一个间歇时间。CCFadeIn 淡入CCFadeOut 淡出CCFadeTo 逐渐改变透明度CCGridActionCCJumpByCCJumpTo 使节点跳跃到指定的位置,可以设置高度和次数。CCMoveBy 使节点根据参数发生相对位移CCMoveTo 将节点移动到指定坐标。CCProgressFromToCCProgressToCCRepeat重复执行行为(继承自CCActionInterval),就是将一个已知的行为或行为序列多次执行,执行的次数通过参数设定,效果类似于CCRepeatForever,但CCRepeat只执行有限次,有运行结束的那一刻。CCRepeatOverCCReverseTimeCCRotateBy 旋转节点CCRotateTo 设置节点的旋转角度。CCScaleTo 设置节点的缩放倍率。CCSequence 行为序列(继承自CCActionInterval),即将若干个待执行的行为按顺序组合在一起,然后依次执行,如果中间有持续行为的话则等到前一个行为执行完毕后再执行下一个(CCCallFunc是并行),因此单独的CCSequence对象是没有意义的。CCSkewToCCSpawn 并行行为(继承自CCActionInterval),即将若干个待执行的行为组合在一起,同时执行它们,行为的执行时间以最长的那个行为为准,就是说当全部的子行为结束时,CCSpawn才算结束。单独的CCSpawn对象也没有意义。CCTargetedActionCCTintBy 使节点色调发生偏移。CCTintTo 设置节点色调。CCBRotateTO
三、动作管理类CCActionManager
CCActionmanager 这个类其实并不属于行为类,它的父类是CCObject,而不是CCAction,但它又与CCAction密不可分,因此在这里单独介绍下。CCActionmanager是个标准的单例类,它的作用顾名思义,就是管理行为类的对象,工作原理是:当节点执行runAction时,会把action通过addAction方法将对象传递给CCActionmanager的单例,该实例再把这个action添加到自己的行为序列中。CCActionmanager通过schedule定时刷新自己的update方法,在这个方法中去调用行为序列中每个action的step(会有一些筛选条件,比如暂停的行为不会update),这些step方法再根据自身的完成进度去update或是结束行为。就是说实际上是由CCActionmanager驱动的每个action去更新自己的逻辑,而runAction方法只是将行为对象添加进CCActionmanager的更新队列罢了。当节点被清除或是行为结束时,CCActionmanager会自动将action从队列中剔除,无需开发者操心。
四、应用
1、移动