1、动作系统
Cocos Creator提供的动作系统可以在一定时间内对节点完成位移,缩放,旋转等各种动作。
Cocos引擎的Action动作类并不是一个在屏幕中显示的对象,动作必须要依托于Node节点类及它的子类的实例才能发挥它的作用,Cocos中的动作不仅包括位置移动等,还包括跳跃、旋转,甚至是对象透明度的变化和颜色的渐变。这些基本动作可以构成各种复杂的动作,也可以通过sequence形成一个完整的动作序列。
1.1、基本使用API
//创建一个移动动作
let action = cc.moveTo(2, 100, 100)//2秒内移动到100,100位置
//执行动作
this.node.runAction( action)
//停止动作
this.node.stopAction( action)
//停止所有动作
this.node.stopAllActions()
1.2、动作类型
1.2.1、基础动作
基础动作就是实现各种形变,位移动画的动作,比如cc.moveTo
用来移动节点到某个位置; cc.rotateBy
用来旋转节点一定的角度;cc.scaleTo
用来缩放节点。
基础动作中分为时间间隔动作和即时动作,前者是在一定时间间隔内完成的渐变动作,前面提到的都是时间间隔动作,它们全部继承自cc.ActionInterval。后者则是立即发生的,比如用来调用回调函数的cc.callFunc;用来隐藏节点的cc.hide,它们全部继承自cc.ActionInstant。
let moveToAc = cc.moveTo(3, 200, 200)
this.node.runAction( moveToAc)
let moveByAc = cc.moveBy(3, 100, 300)
this.node.runAction( moveByAc)
1.2.2、容器动作
容器动作以不同方式将动作组织起来
1、顺序动作:顺序动作让一系列自动做按顺序一个个执行
//按顺序执行
let seq = cc.sequence(
cc.moveBy( 1, 200, 0),
cc.moveBy( 1, 0, -200),
cc.moveBy( 1, -200, 0),
cc.moveBy( 1, 0, 200)
)
this.node.runAction( seq)
2、同步动作:同步动作可以同步执行一系列的自动做,字动作的执行结果会叠加起来修改节点的属性
//同步动作
let sp = cc.spawn(
cc.moveBy( 2, 0, 100),
cc.scaleTo( 2, 0.8, 2.8)
)
this.node.runAction( sp)
3、重复动作:cc.repeat重复做东用来多次重复一个动作
//重复动作
let rp = cc.repeat(
cc.sequence(
cc.moveBy( 0.1, 200, 0),
cc.moveBy( 0.1, 0, -200),
cc.moveBy( 0.1, -200, 0),
cc.moveBy( 0.1, 0, 200)
)
, 5)
this.node.runAction( rp)
4、永远重复动作:比如跑酷游戏中的背景图一直在动
//永远重复动作
let rpEver = cc.repeatForever(
cc.sequence(
cc.moveBy( 0.5, 100, 0),
cc.moveBy( 0.5, 0, -100),
cc.moveBy( 0.5, -100, 0),
cc.moveBy( 0.5, 0, 100)
)
)
this.node.runAction( rpEver)
5、速度动作:cc.speed速度动作可以改变目标动作的执行速率,让动作更快或者更慢完成
//速度动作(下方例子速度加快了2倍)
let speedAc = cc.speed(
cc.spawn(
cc.moveBy( 2, 0, 100),
cc.scaleTo( 2, 0.8, 2.8)
), 2
)
this.node.runAction( speedAc)
3、
1.2.3、动作回调
//动作回调
//定义回调参数
let finished = cc.callFunc( ( target, param) => {
cc.log("动作回调:", param)
}, this, {p:'我是参数'})
//传入回调参数
let seq = cc.sequence(
cc.moveBy( 2, 200, 0),
cc.moveBy( 2, -200, 0),
finished
)
//执行动作
this.node.runAction( seq)