Cocos Creator中Action的使用
在Cocos Creator游戏开发中,动作特效是经常使用的,本文我们就一起来归纳总结下。
一、 Action简介
1: Action类是动作命令,创建Action后节点运行action就能执行Action的动作;
2: Action分为两类:
(1) 瞬时就完成的ActionInstant, (2) 要一段时间后才能完成ActionInterval;
3: 节点运行action: cc.Node runAction: ;
4: 移动:cc.moveTo, cc.moveBy To: 目标 By: 变化
5: 旋转:cc.roateBy, cc.rotateTo,
6: 缩放:cc.scaleBy, cc.scaleTo,
7: 渐变:cc.fadeOut(淡出), cc.fadeIn(淡入): cc.fadeTo();
8: 回调:cc.callFunc, cc.delayTime
9: 序列:cc.sequnce, cc.repeat, cc.repeatForever,spawn
10: 缓动:Action easing(缓动的方式): 加上缓动特效, cc.easeXXXXX查看文档设置自己想要的缓动对象
11: 停止运行action:stopAction;
12: 停止所有的action:stopAllActions;
二、 案例演示
// 1: Action类是动作命令,创建Action后节点运行action就能执行Action的动作;
// 2: Action分为两类:
// (1) 瞬时就完成的ActionInstant, (2) 要一段时间后才能完成ActionInterval;
// 3: 节点运行action: cc.Node runAction: ;
// 4: 移动:cc.moveTo, cc.moveBy To: 目标 By: 变化
//let mt : cc.Action = cc.moveTo(1, 300, 200);
//let mt : cc.Action = cc.moveTo(1, cc.v2(300, 200));
// this.node.runAction(mt);
// let mb : cc.Action = cc.moveBy(1, cc.v2(300, 200));
// this.node.runAction(mb);
// 5: 旋转:cc.roateBy, cc.rotateTo,
// let rb : cc.Action = cc.rotateBy(1, -45);
// this.node.runAction(rb);
// let rt : cc.Action = cc.rotateTo(1, 45);
// this.node.runAction(rt);
// 6: 缩放:cc.scaleBy, cc.scaleTo,
//this.node.scaleX = 2;
// 在原有基础之上缩放,scaleX = 2, scaleX = 2*2, scaleY = 1 * 2
// let sb : cc.Action = cc.scaleBy(1, 2, 2); // 相对于节点原有缩放
// this.node.runAction(sb);
// 缩放到,某个比例,与原有缩放值无关
// let st : cc.Action = cc.scaleTo(1, 2, 2);
// this.node.runAction(st);
// 7: 渐变:cc.fadeOut(淡出), cc.fadeIn(淡入): cc.fadeTo();
// let fout : cc.Action = cc.fadeOut(1);
// this.node.runAction(fout);
// this.node.opacity = 0;
// let fin : cc.Action = cc.fadeIn(1);
// this.node.runAction(fin);
// let ft : cc.Action = cc.fadeTo(1, 110);
// //this.node.runAction(ft);
// // 8: 回调:cc.callFunc, cc.delayTime
// let d : cc.Action = cc.delayTime(0.3);
// let self = this;
// let end_fun : cc.Action = cc.callFunc(function(){
// console.log("节点已经变成半透明了!");
// //this.node.removeFromPrarent();
// self.node.removeFromParent();
// console.log("节点被移出");
// });
// let seq : any = cc.sequence([ft, d, end_fun]);
// this.node.runAction(seq);
// 9: 序列:cc.sequnce, cc.repeat, cc.repeatForever
// let r : cc.Action = cc.rotateBy(0.3, 360);
// let rf : cc.Action = cc.repeatForever(r);
// this.node.runAction(rf);
//this.node.stopAction(rf);
//this.node.stopAllActions();
// 10: 缓动:Action easing(缓动的方式): 加上缓动特效, cc.easeXXXXX查看文档设置自己想要的缓动对象
// let m = cc.moveTo(2, cc.v2(300, 200)).easing(cc.easeBackOut());
// // 小写开头的为方法cc.easeBackOut(),方法后面有()
// this.node.runAction(m);
// 11: 停止运行action:stopAction;
// 12: 停止所有的action:stopAllActions;
// 一边移动一边缩放,sequence,序列,先后执行,同步
let m : cc.Action = cc.moveTo(2, cc.v2(300, 200));
let r : cc.Action = cc.rotateBy(4, 360);
//this.node.runAction(cc.sequence([m, r]));
// spawn,异步,多个Action可以同时执行
this.node.runAction(cc.spawn([m, r]));
三、 总结
1、类似于拍电影,首先导演要安排剧本Action,然后节点去执行剧本this.node.runAction。
2、停止演戏stopAction()和stopAllActions()。
3、常见剧本:移动moveTo、moveBy,旋转rotateXX、缩放scaleXX、渐变fadeXXX。
4、注意To是到某个值,By的相对变化量。
5、回调和延迟:cc.callFunc, cc.delayTime。
6、缓动:Action easing(缓动的方式): 加上缓动特效, cc.easeXXXXX查看文档设置自己想要的缓动对象。
7、同步和异步:sequence(动作先后顺序执行)、spawn(动作同时执行)。
8、重复循环执行:cc.repeat, cc.repeatForever(action)。