注意事项
两个对象同时执行一个action
,结果会不正确
local moveto_action = cc.MoveBy:create(0.4, cc.p(0,0));
local scaleto_small_action = cc.ScaleTo:create(0.5, 1.5)
local scaleto_nomal_action = cc.ScaleTo:create(0.5, 1)
local spawn_effect = cc.Sequence:create(moveto_action,scaleto_small_action,cc.CallFunc:create(function ( ... )
print("执行回调")
end),scaleto_nomal_action());
feedback_shell:runAction(spawn_effect)
feedback_voice:runAction(spawn_effect)
----------------------------------------------------------------------------------
执行结果:
feedback_shell正常移动 feedback_voice移动路径更改 因为runaction是浅拷贝 所以spawn_effect会发生更改
----------------------------------------------------------------------------------
正确做法是使用:clone()的方式进行深拷贝
feedback_shell:runAction(spawn_effect:clone)
feedback_voice:runAction(spawn_effect:clone)
只有....by
可以执行 :reverse()
函数,例如cc.RotateBy
,cc.moveBy
,cc.ResizeBy
等
local roationToRight = cc.RotateBy:create(0.1,30)
local rotation = cc.Sequence:create(roationToRight,roationToRight:reverse(),cc.CallFunc:create(handler(self, function ( ... )
print("执行回调结果")
end)))
self.hook:runAction(cc.RepeatForever:create(rotation))
xxxTo
移动到绝对位置,xxxBy
移动一个相对位置, 并且所有的xxxBy
动作都有对应的reverse
方法
行为类
行为类的基类是CCAction
,任何一种行为都是由它拓展衍变而来的。
行为类可以分为四大类:有限次执行类、无限重复行为类、速度行为类和跟随移动类,其中前两者的使用频率最高;而有限次执行类又可以分为瞬时行为类和过程行为类
继承关系如下:
![](https://img.haomeiwen.com/i7424083/ab48fd58ecd590fd.jpg)
-
CCFiniteTimeAction
从字面就能看出来(finite = 有限的),是有限次执行类,它是最为普通的行为,就是按时间顺序做一系列事情,做完后行为结束; -
CCRepeatForever
的名字更易懂了,无限重复行为类,就是说它可以让节点反复的做一件事,除非把行为或节点删除,否则永远不会停止; -
CCSpeed
的作用是调整行为实例的执行速度,因此它依赖于其它的行为,单独的CCSpeed
没有意义; -
CCFollow
可以使节点跟随指定的另一个节点移动。
具体动作
1. 移动动作
cc.MoveBy:create(time, posX, posY) 在time时间内,相对当前位置基础上移动x,y个单位。
cc.MoveTo:create(time, posX, posY) 在time时间内,移动到cc.p(posX, posY)位置。
2. 缩放动作
cc.ScaleBy:create(time, scaleX, scaleY) 在time时间内,相对当前大小缩放scale(scaleX, scaleY)个单位
cc.ScaleTo:create(time, scaleX, scaleY) 在time时间内,缩放到scale(scaleX, scaleY)大小
3. 调整大小动作
cc.ResizeBy:create(time, cc.size(resizeX,resizeY)) 在time时间内,相对当前大小扩大或缩小resize(resizeX, resizeY)个单位
cc.ResizeTo:create(time, cc.size(resizeX,resizeY)) 在time时间内,扩大或缩小到reisze(resizeX, resizeY)大小
注:scale
和 resize
的区别是一个是拉伸改变大小,(导致图形在变大缩小过程中边缘模糊), 一个是控件放大缩小(图形在变大缩小过程中不会模糊)
4. 斜歪动作
cc.SkewTo:create(time, angleX, angleY) 在time时间内,压缩倾斜至angleX, angleY角度 (形状会变)
cc.SkewBy:create(time, angleX, angleY) 在time时间内,相对当前角度压缩倾斜angleX, angleY角度(形状会变)
5. 旋转动作
cc.RatoteTo:create(time, angleX, angleY) 在time时间内,旋转至angleX, angleY角度(形状不变)
cc.RatoteBy:create(time, angleX, angleY) 在time时间内,相对当前角度旋转angleX, angleY角度(形状不变
注:skew
和 rotate
的区别是一个是压缩倾斜旋转(形状会变), 一个是正常旋转(形状不变)
6. 跳跃动作
cc.JumpTo:create(time, cc.p(posX, posY), height, jumps) 在time时间内,跳到目标位置, 跳的高度为height,跳的次数为jumps
cc.JumpBy:create(time, cc.p(posX, posY), height, jumps) 在time时间内,相对当前位置跳起一段距离,跳的高度为height,跳的次数为jumps
7. 二阶贝塞尔曲线动作
ccBezierConfig ccBezier
bezier.controlPoint_1 = cc.p(posX, posY)
bezier.controlPoint_2 = cc.p(posX, posY)
bezier.endPosition = cc.p(posX, posY)
cc.BezierBy:create(time, ccBezierConfig) 在time时间内,相对于当前位置做贝塞尔曲线运动
cc.BezierTo:create(time, ccBezierConfig) 在time时间内,做贝塞尔曲线运动到指定位置
注:ccBezierConfig:
typedef struct _ccBezierConfig {
Vec2 endPosition;//曲线的终点坐标(相对于起点的偏移量,非绝对坐标),图中的P3
Vec2 controlPoint_1;//曲线第一个弧度的参考点坐标(相对于起点的偏移量,非绝对坐标),图中的P1
Vec2 controlPoint_2;曲线第二个弧度的参考点坐标(相对于起点的偏移量,非绝对坐标),图中的P2
} ccBezierConfig;
![](https://img.haomeiwen.com/i7424083/a194b901a6e44663.jpg)
Bezier
贝塞尔曲线,任何一条曲线都可以通过与它相切的控制线两端的点的位置来定义。因此,贝塞尔曲线可以用4个点描述,其中两个点描述两个端点,另外两个点描述每一端的切线
8. 渐入淡出动作
cc.FadeIn:create(time) 在time时间内,边完全不透明,渐变出现
cc.FadeOut:create(time) 在time时间内,变完全透明,渐变消失
cc.FadeTo:create(time, opacity) 在duration时间内,将精灵透明度变为opacity,由正常变透明
注:cc.FadeTo
是cc.FadeIn
,cc.FadeOut
的父类,包含cc.FadeTo:reverse()
功能
9. 变色动作
cc.TintTo:create(time, colorR, colorG, colorB) 在time时间内将颜色调整到某一值,色彩变化的消失动作
cc.TintBy:create(time, colorR, colorG, colorB) 在time时间内将颜色调整为某一值,色彩变化的出现动作
10. 闪烁运动
cc.Blink:create(time, blinks) -- 创建一个闪烁动作,第一个参数为持续时间,第二个参数为闪烁次数
注:包含cc.Blink:reverse()
函数
11. 延迟动作
cc.DelayTime:create(time) --延迟时间
12. 球面旋转 OrbitCamera类 (action视角按照球面坐标轨迹 围绕屏幕中心进行旋转)
cc.OrbitCamera:create(time, radius, deltaRadius, angleZ, deltaAngleZ, angleX, deltaAngleX) -- 创建一个球面坐标轨迹进行旋转的动作,参数依次为起始半径、半径差、起始z角、旋转z角的差、起始x角、旋转x角的差,这些参数的运动视角动作类
13. 加速运动
cc.Speed:create(action, speed) --让目标动作以倍速运动
14. 多个动作同时执行
cc.Spawn:create(action1, action2 ...) --多个动作同时执行
15. 多个动作按照前后顺序逐一执行
cc.Sequence:create(action1, action2 ...) --多个动作按照前后顺序逐一执行
注:如果要对目标动作全部进行反方向运动,可以使用如下形式操作(cc.Sequence
中的所有动作都必须支持reverse
函数,否则会出现异常)
local move = cc.MoveBy:create(2, cc.p(300, 400))
local scale = cc.ScaleBy:create(2, 3);
local seq = cc.Sequence:create(move,scale,NULL)
local reveseSeq = cc.Sequence:create(seq,seq:reverse(),NULL)
sprite:runAction(reveseSeq)
16. 重复运动
cc.Repeat:create(action, times) --重复某个动作N次
17. 永久性的重复运动
cc.RepeatForever:create(action) --永久重复某个动作
18. 跟随动作
cc.Follow:create(followedNode, rect) --目标对象在跟随范围内跟随,出了范围不跟随
网友评论