动作、特效和动画
动作包括基本动作和基本动作的组合,这些动作有缩放、移动、旋转等,而这些动作变化的速度也可以设定。
动作类是Action,类图如下:
Action有3个子类,FiniteTimeAction 是一种受时间限制的动作,Follow是一种允许精灵跟随另一个精灵的动作,Speed是在一个动作运行时改变其运动速率。
FiniteTimeAction 有两个子类,ActionInstant和ActionInterval,是两种不同风格的动作类。
ActionInstant:封装了一种瞬时动作。
ActionInterval: 封装了一种间隔动作。
在Node类有关动作的函数吗:
Action* runAction(Action* action); // 开始运行指定动作,返回值任然是一个动作对象
void stopAction(Action* action);// 暂停指定动作,
void stopActionByTag(int tag);// 通过指定标签停止动作
void stopAllAction();// 停止所有动作
瞬时动作
瞬时动作就是不等待立即执行的动作,瞬时动作的基类是ActionInstant
间隔动作
间隔动作执行完成需要一段时间,可以设置duration属性来设置动作的执行时间。间隔动作基类是ActionInterval
组合动作
动作往往不是单一的,而是复杂的组合,可以按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。组合动作包括一下几类:顺序、并列、有限次数重复、无限次数重复、反动作和动画
Sequence类派生于间隔动作ActionInterval,作用就是顺序排列若干个动作(以NULL结束),然后按照先后次序逐个执行。
Spawn类,它是从ActionInterval继承而来,该类的的作用就是同时并列执行若干个动作(以NULL结束),但要求动作必须是可以同时执行的,如移动式翻转,改变颜色,改变大小等。
Repeat类,它也是ActionInterval继承而来。Repeate::create(seq,3);重复3次,seq是顺序对象
RepeatForever,它也是从ActionInterval继承而来。
动作速度控制
通过基本动作和组合动作实现了针对精灵的各种运动和动画效果的改变。通过ActionEase及子类和Speed类可以使精灵以非线性速度运动,这样使效果更好。
函数调用
在顺序动作执行的中间或结束时,可以回调某个函数,从而可以在该函数中执行任何处理。函数调用可以分为无参函数调用和有参函数调用
相关类有:CallFunc和CallFuncN,其中CallFunc是无参函数调用类,CallFuncN是自身对象作为参数的函数调用类
特效
特效事实上属于间隔动作,特效类GridAction类也称为网格动作。
Grid3DAction只要有两个子类Grid3DAction和TiledGrid3DAction。
TiledGrid3DAction系列的子类中会有瓦片效果。
网格动作采用3D效果,对内存和CPU的开销是巨大的,不启用OpenGL的深度缓冲,3D效果就会失真,但是启用时对显示性能会造成负面影响
动画
动画分为场景过渡动画和帧动画。
帧动画
帧动画就是按一定时间间隔、一定的顺序、一帧一帧地显示帧图片,
Animation 和 Animate 类,Animation是动画类,Animate类是动作类,