(1)
从代码的角度讲,行为action其实就是改变实体结点的属性,如坐标、角度,大小等,这些属性大部分都可以靠action实体类自身封装的方法来设置,这些动作都被封装成一个个具体的类,这样使得如果要让一个结点执行一段行为序列或者不断重复执行一个行为时,编码变得简单,那么就是创建类的实例对象就可以了。
行为类的基类是CCAction,任何一种行为都是由它拓展衍变而来的。行为类可以分为四大类:有限次执行类、无限重复行为类、速度行为类和跟随移动类,其中前两者的使用频率最高;而有限次执行类又可以分为瞬时行为类和过程行为类。它们的继承关系如下图:
图中的CCAction是基类,比较抽象,在实际开发中不会直接用到,更多的是在参数传递中充当‘泛型’;
CCFiniteTimeAction从字面就能看出来(finite = 有限的),是有限次执行类,它是最为普通的行为,就是按时间顺序做一系列事情,做完后行为结束;而它又可以分成两类动作,区间动作和瞬时动作,如果这些动作属性是在经过一段时间后修改的,那么这些动作属于区间动作:CCActionInterval;否则属于瞬时动作:CCActionInstance。例如说:move,jump,scale之类的动作就是区间动作了,而place,show,hide这些动作就是瞬时动作了。
CCRepeatForever的名字更易懂了,无限重复行为类,就是说它可以让节点反复的做一件事,除非把行为或节点删除,否则永远不会停止;
CCSpeed的作用是调整行为实例的执行速度,因此它依赖于其它的行为,单独的CCSpeed没有意义;
CCFollow可以使节点跟随指定的另一个节点移动。
CCActionmanager
这个类其实并不属于行为类,它的父类是NSObject,而不是CCAction,但它又与CCAction密不可分。
CCActionmanager是个标准的单例类,它的作用顾名思义,就是管理行为类的对象,工作原理是:当节点执行runAction时,会把action通过addAction方法将对象传递给CCActionmanager的单例,该实例再把这个action添加到自己的行为序列中。CCActionmanager通过schedule定时刷新自己的update方法,在这个方法中去调用行为序列中每个action的step(会有一些筛选条件,比如暂停的行为不会update),这些step方法再根据自身的完成进度去update或是结束行为。就是说实际上是由CCActionmanager驱动的每个action去更新自己的逻辑,而runAction方法只是将行为对象添加进CCActionmanager的更新队列罢了。当节点被清除或是行为结束时,CCActionmanager会自动将action从队列中剔除,无需开发者操心
(2)
动作名称后缀By的动作称为相对动作,动作名称后缀To的动作称为绝对动作,前者所有,后者部分有自己动作的reverse反转动作。
解释一下By和To的区别:
To:表示绝对。
By:表示相对。
举例:
CCSprite *sprite = [CCSprite spriteWithFile:@"my.png"]; CCMoveBy *moveBy = [CCMoveBy actionWithDuration:2.0f position:ccp(100, 50)]; [sprite runAction:moveBy];
(3)动作的分类和使用
1、和位置有关的动作
(1) CCMoveTo/CCMoveBy :运动
(2) CCJumpTo/CCJumpBy :沿抛物线跳跃运动
(3) CCBezierTo/CCBezierBy :沿贝塞尔曲线运动(什么是贝塞尔曲线请Google)
(4) CCPlace :将节点对象直接放置在所需的位置
2、和大小有关的动作
(1) CCScaleTo/CCScaleBy :放大或者缩小到某个特定的比例
3、和旋转有关的动作
(1) CCRotateTo/CCRotateBy :旋转
4、和显示有关的动作
(1) CCShow : 立即显示节点对象
(2) CCHide : 立即隐藏节点对象
(3) CCToggleVisibility :切换节点对象的可视属性
(4) CCBlink :在一定时间内闪动特定的次数
5、和透明度有关的动作
(1) CCFadeIn :淡入
(2) CCFadeOut :淡出
(3) CCFadeTo :修改节点对象的透明度到某特定的数值
6、和色彩有关的动作
(1) CCTintTo/CCTintBy :将节点着色到某一特定的RGB色彩值
7、和翻转有关的动作
(1) CCFlipX :水平方向
(2) CCFlipY :垂直方向
8、组合动作
(1) CCSpawn :使节点同时执行多个动作(组合动作的时间间隔是里面action时间间隔最长的那个)
(2) CCSequence :使节点顺序执行多个动作
(3) CCRepeat :使节点重复执行某个动作
(4) CCRepeatForever :使节点反复执行某个动作
9、Ease动作:属于特殊的组合动作,可以修改内部动作的速度
10、延迟动作
(1) CCDelayTime
11、方法回调动作:(后三个有参数)
参数: (N:Node D:Data O:Object)
(1)CCCallFunc
(2)CCCallFuncN
(3)CCCallFuncND
(4)CCCallFuncO
12、块语句调用动作:(后两个有参数)
(1)CCCallBlock
(2)CCCallBlockN
(3)CCCallBlockO
13、反转动作
注意:后缀是To的动作通常是不支持反转动作的,后缀是By的动作通常是支持反转动作的
(1) CCReverseTimer
(2) [action reverse] 也可以创建反转动作 但是只有CCActionInterval类型的动作才可以使用reverse方法
14、特殊动作
(1) CCSpeed
(2) CCActionTween
附注:要创建这些动作实例时一般采用类方法:actionWith--