# 动作系统的使用
* 动作API的使用
// 创建一个动作
var action = cc.moveTo(2, 100, 100);
// 节点执行一个动作
node.runAction(action);
// 节点停止一个动作
node.stopAction(action);
// 节点停止所有动作
node.stopAllActions();
// 给动作设置一个Tag
var tag = 1;
action.setTag(tag);
// 通过 Tag 获取一个动作
node.getActionBtTag(tag);
// 通过 tag 停止一个动作
node.stopActionByTag(tag);
* 即时动作
即时动作就是瞬间完成的基础动作,可以完成节点的各种形变、位移、显示/消失、缩放等。 他们全都继承自 cc.ActionInstanl
* 时间间隔动作
时间间隔动作就是在一定时间内完成的渐变动作, 他们全都继承自 cc.ActionInterval
* 容器动作
容器动作就是可以将不同的动作组合起来,完成复杂的动作。
1. 顺序动作,cc.sequence可以让一系列动作顺序执行
// 让节点左右来回移动
var seq = cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0));
node.runAction(seq);
2. 同步动作,cc.spawn可以同步执行一系列子动作,子动作会叠加起来显示效果。
// 让节点向上移动的同时缩放
var spawn = cc.spawn(cc.moveBy(0.5, 0, 50), cc.scaleTo(0.5, 0.8, 1.4));
node.runAction(spawn);
3. 重复动作,cc.repeat可以多次重复一个或多个动作
// 让节点左右来回移动,并重复5次
var seq = cc.repeat(cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0)), 5);
node.runAction(seq);
4. 永远重复动作,cc.repeatForever 一直重复某个动作,直到手动停止
// 让节点左右来回移动并一直重复
var seq = cc.repeatForever(cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0)));
node.runAction(seq);
5. 速度动作 cc.speed 可以改变目标动作的执行速率,让动作更快或更慢完成。
// 让目标动作速度加快一倍,相当于原本2秒的动作在1秒内完成
var action = cc.speed(cc.spawn(cc.moveBy(2, 0, 50), cc.scaleTo(2, 0.8, 1.4)), 0.5);
node.runAction(action);
* 缓动动作
缓动动作不可以单独存在,它永远是为了修饰基础动作而存在的。 它可以用来修饰基础动作的时间线,让动作有快入/快出、缓入/缓出或其他更为复杂的特效。 并且,只有时间间隔动作才支持缓动。
// API
var action = cc.scaleTo(0.5, 2, 2);
action.easing(cc.easeIn(3.0));
* 动作回调
动作回调API:
var finished = cc.callFunc(this.myMethod, this, opt);
cc.callFunc 的第一个参数是处理回调的方法,可以是CCClass的成员方法,也可以是匿名函数。 第二个参数绑定this。 第三个参数是传入处理函数的参数。
在声明了回调函数后,可以这样用
var myAction = cc.sequence(cc.moveBy(1, cc.v2(0, 100)), cc.fadeOut(1), finished);
// 也可以多次插入回调
var myAction = cc.sequence(cc.moveBy(1, cc.v2(0, 100)), finished1, cc.fadeOut(1), finished2);
动作列表: https://docs.cocos.com/creator/manual/zh/scripting/action-list.html