美文网首页
Cocos2d-x 行为类CCAction

Cocos2d-x 行为类CCAction

作者: 白小白152 | 来源:发表于2019-09-30 10:28 被阅读0次

注意事项

两个对象同时执行一个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.RotateBycc.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,任何一种行为都是由它拓展衍变而来的。
行为类可以分为四大类:有限次执行类、无限重复行为类、速度行为类和跟随移动类,其中前两者的使用频率最高;而有限次执行类又可以分为瞬时行为类和过程行为类

继承关系如下

继承关系.jpg
  1. CCFiniteTimeAction从字面就能看出来(finite = 有限的),是有限次执行类,它是最为普通的行为,就是按时间顺序做一系列事情,做完后行为结束;
  2. CCRepeatForever的名字更易懂了,无限重复行为类,就是说它可以让节点反复的做一件事,除非把行为或节点删除,否则永远不会停止;
  3. CCSpeed的作用是调整行为实例的执行速度,因此它依赖于其它的行为,单独的CCSpeed没有意义;
  4. 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)大小

注:scaleresize的区别是一个是拉伸改变大小,(导致图形在变大缩小过程中边缘模糊), 一个是控件放大缩小(图形在变大缩小过程中不会模糊)

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角度(形状不变

注:skewrotate 的区别是一个是压缩倾斜旋转(形状会变), 一个是正常旋转(形状不变)

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;
贝塞尔曲线.jpg

Bezier贝塞尔曲线,任何一条曲线都可以通过与它相切的控制线两端的点的位置来定义。因此,贝塞尔曲线可以用4个点描述,其中两个点描述两个端点,另外两个点描述每一端的切线

8. 渐入淡出动作
 cc.FadeIn:create(time) 在time时间内,边完全不透明,渐变出现
 cc.FadeOut:create(time) 在time时间内,变完全透明,渐变消失
 cc.FadeTo:create(time, opacity) 在duration时间内,将精灵透明度变为opacity,由正常变透明

注:cc.FadeTocc.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) --目标对象在跟随范围内跟随,出了范围不跟随

相关文章

网友评论

      本文标题:Cocos2d-x 行为类CCAction

      本文链接:https://www.haomeiwen.com/subject/edbkuctx.html