123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- /**
- * 动画效果类
- */
- import easeInOut = cc.easeInOut;
- import GameLog from "./GameLogMgr";
- import Tween = cc.Tween;
- import tween = cc.tween;
- export default class ActionMgr {
- //疯狂抖动手指
- public static shakeHand(node: cc.Node) {
- tween(node)
- .by(0.05, {y: 20})
- .by(0.05, {y: -20})
- .union()
- .repeatForever()
- .start()
- }
- public static scaleNode(node: cc.Node, scale: number, time = 0.5) {
- try {
- cc.tween(node)
- .to(0, {scale: scale, y: -node.height * (1 - scale)})
- .to(time, {scale: 1, y: 0})
- .start()
- } catch (e) {
- node.scale = 1;
- node.y = 0;
- GameLog.log('shake动画异常', e);
- }
- }
- public static moveUpDownForever(node: cc.Node, runTime = 0.2, diff = 10) {
- cc.tween(node).repeatForever(
- cc.sequence(
- cc.moveBy(runTime, new cc.Vec2(0, diff)),
- cc.moveBy(runTime, new cc.Vec2(0, -diff)),
- )
- ).start();
- }
- /**
- * 旋转节点
- * @param node
- * @param duration
- */
- public static rotate(node: cc.Node, duration = 3) {
- try {
- cc.tween(node).repeatForever(
- cc.sequence(
- cc.rotateTo(duration, 180),
- cc.rotateTo(duration, 360),
- )
- ).start();
- } catch (e) {
- GameLog.error('shakeNode异常', e, node);
- }
- }
- /**
- * 放大缩小 node
- * @param node
- * @param timeRun
- * @param timeStop
- * @param scale
- * @param count
- * @param endScale
- * @constructor
- */
- public static scaleStop(node: cc.Node, timeRun = 0.1, timeStop = 10, scale = 0.3, count = 1, endScale = 1) {
- try {
- if (!node) {
- return;
- }
- node.scale = endScale;
- cc.tween(node)
- .repeatForever(
- cc.tween()
- .repeat(count,
- cc.tween()
- .to(timeRun, {scale: 1 + scale}, {easing: "smooth"})
- .to(timeRun, {scale: endScale}, {easing: "smooth"})
- )
- .to(timeRun, {angle: 0})
- .delay(timeStop)
- )
- .start()
- } catch (e) {
- GameLog.error('shakeNode异常', e, node);
- }
- }
- public static shakeNode(node: cc.Node, timeRun = 0.3, dstAngle: number = 10, count: number = 5) {
- cc.tween(node)
- .repeat(count,
- cc.tween()
- .to(timeRun, {angle: -dstAngle})
- .to(timeRun, {angle: dstAngle})
- ).to(timeRun, {angle: 0}).start();
- }
- /**
- * 摇动node
- * @param node
- * @param duration
- * @param dstAngle
- * @constructor
- */
- public static shakeNodeForever(node: cc.Node, duration = 4, dstAngle = 10) {
- try {
- cc.tween(node).repeatForever(
- cc.sequence(
- cc.rotateTo(duration, -dstAngle),
- cc.rotateTo(duration, dstAngle),
- )
- ).start();
- } catch (e) {
- GameLog.error('shakeNode异常', e, node);
- }
- }
- /**
- * node晃动后停止,一段时间后继续晃动
- * @param node 动作的节点
- * @param timeRun 单次晃动到左右任一边的时间
- * @param timeStop 停止的时间
- * @param dstAngle 晃动的角度
- * @param shakeCount 晃动的次数
- */
- public static shakeStop(node: cc.Node, timeRun = 0.1, timeStop = 10, dstAngle = 10, shakeCount = 5) {
- try {
- cc.tween(node)
- .repeatForever(
- cc.tween()
- .delay(timeStop)
- .repeat(shakeCount,
- cc.tween()
- .to(timeRun, {angle: -dstAngle})
- .to(timeRun, {angle: dstAngle})
- )
- .to(timeRun, {angle: 0})
- )
- .start()
- } catch (e) {
- GameLog.error('shakeStop异常', e, node);
- }
- }
- public static scaleMove(node: cc.Node, delayTime: number = 3, repeatCount: number = 2,) {
- cc.tween(node)
- .repeatForever(
- cc.tween()
- .delay(delayTime)
- .repeat(repeatCount,
- cc.tween()
- .to(0.3, {scale: 1.1})
- .to(0, {scale: 1})
- .to(0.3, {scale: 1.2})
- .to(0, {scale: 1})
- )
- // .repeat(repeatCount,
- // cc.tween()
- // )
- )
- .start();
- }
- /**
- * 界面缩放进入
- * @param node
- * @param duration
- */
- public static moveBigIn(node: cc.Node, duration = 0.3) {
- if (!node) {
- return false;
- }
- try {
- node.scale = 2;
- cc.tween(node)
- .to(duration, {scale: 1}, easeInOut(1))
- .start();
- } catch (e) {
- node.scale = 1;
- GameLog.error('moveIn 异常', e, node);
- }
- }
- /**
- * 界面缩放进入
- * @param node
- * @param duration
- * @param beginSale
- */
- public static moveIn(node: cc.Node, duration: number = 0.4, beginSale: number = 0) {
- node.scale = beginSale;
- cc.tween(node)
- .to(duration, {scale: 1}, {easing: 'backOut'})
- .start();
- }
- /**
- * 界面从上推下
- */
- public static moveTop(node: cc.Node, time: number = 0.4) {
- node.y = node.height / 2;
- cc.tween(node)
- .to(time,{y: 0}, {easing: "smooth"})
- .start()
- }
- /**
- * 界面缩放退出
- * @param node
- * @param duration
- * @param endScale
- */
- public static moveOut(node: cc.Node, duration = 0.4, endScale = 0) {
- if (!node) {
- return false;
- }
- try {
- node.scale = 1;
- cc.tween(node)
- .to(duration, {scale: endScale})
- .start();
- } catch (e) {
- node.scale = 0;
- GameLog.error('moveOut 异常', e, node);
- }
- }
- public static TWEEN_FROM_SIDE = {
- TOP: 1,
- DOWN: 2,
- LEFT: 3,
- RIGHT: 4
- };
- private static _moveSideNodePosition = {};
- /**
- * 从画布外进入, 不能重复调用
- * @param node 动作的节点
- * @param beginSide 界面进入的边
- * @param time 动作进行的时间/s
- * @param delay 动作延迟进行的时间/s
- */
- public static moveInSide(node: cc.Node, beginSide = this.TWEEN_FROM_SIDE.TOP, time = 0.5, delay = 0) {
- if (!node) {
- return false;
- }
- if (!this._moveSideNodePosition.hasOwnProperty(node.uuid)) {
- this._moveSideNodePosition[node.uuid] = node.position.clone();
- }
- try {
- let resultPos = this._getSideResultPos(node, beginSide);
- node.position = resultPos;
- GameLog.log("节点", node.name, "界面外坐标为:", resultPos);
- cc.tween(node)
- .delay(delay)
- .to(time, {position: this._moveSideNodePosition[node.uuid].clone()}, {easing: 'quartIn'})
- .start();
- } catch (e) {
- node.position = this._moveSideNodePosition[node.uuid].clone();
- GameLog.log("move In Side 异常", e, node);
- }
- }
- /**
- * 移出画布外, 不能重复调用
- * @param node 动作的节点
- * @param endSide 界面移出的边
- * @param time 动作进行的时间/s
- */
- public static moveOutSide(node: cc.Node, endSide = this.TWEEN_FROM_SIDE.TOP, time = 0.5) {
- if (!node) {
- return false;
- }
- if (!this._moveSideNodePosition.hasOwnProperty(node.uuid)) {
- this._moveSideNodePosition[node.uuid] = node.position;
- }
- try {
- let resultPos = this._getSideResultPos(node, endSide);
- cc.tween(node)
- .to(time, {position: resultPos}, {easing: 'quartIn'})
- .call(() => {
- node.position = this._moveSideNodePosition[node.uuid].clone();
- GameLog.log('end move out side', node.position);
- })
- .start();
- } catch (e) {
- node.position = this._moveSideNodePosition[node.uuid].clone();
- GameLog.log("move Out Side 异常", e, node);
- }
- }
- private static _getSideResultPos(node: cc.Node, side) {
- //获取屏幕尺寸
- let winSize = cc.winSize;
- let windowHeight = winSize.height;
- let windowWidth = winSize.width;
- GameLog.log("屏幕尺寸大小为:", windowHeight, windowWidth);
- //根据节点移动方向获取坐标
- let pos;
- switch (side) {
- case ActionMgr.TWEEN_FROM_SIDE.TOP:
- pos = new cc.Vec2(node.x, windowHeight + node.height);
- break;
- case ActionMgr.TWEEN_FROM_SIDE.DOWN:
- pos = new cc.Vec2(node.x, -windowHeight - node.height);
- break;
- case ActionMgr.TWEEN_FROM_SIDE.LEFT:
- pos = new cc.Vec2(-windowWidth - node.width, node.y);
- break;
- case ActionMgr.TWEEN_FROM_SIDE.RIGHT:
- pos = new cc.Vec2(windowWidth + node.width, node.y);
- break;
- }
- return pos;
- }
- /**
- * 左右移动
- * @param node 运动的节点
- * @param direction 运动的方向
- * @param disMove 运动的距离
- * @param timeMove 运动的时间/s
- */
- public static moveLeftRight(node: cc.Node, direction, disMove: number, timeMove: number) {
- try {
- let lessPos;
- let morePos;
- switch (direction) {
- case ActionMgr.TWEEN_FROM_SIDE.LEFT:
- case ActionMgr.TWEEN_FROM_SIDE.RIGHT:
- lessPos = new cc.Vec2(node.x - disMove, node.y);
- morePos = new cc.Vec2(node.x + disMove, node.y);
- break;
- case ActionMgr.TWEEN_FROM_SIDE.TOP:
- case ActionMgr.TWEEN_FROM_SIDE.DOWN:
- lessPos = new cc.Vec2(node.x, node.y - disMove);
- morePos = new cc.Vec2(node.x, node.y + disMove);
- break;
- }
- cc.tween(node).repeatForever(
- cc.sequence(
- cc.moveTo(timeMove, lessPos),
- cc.moveTo(timeMove, morePos)
- )
- ).start();
- } catch (e) {
- GameLog.error('moveLeftRight异常', e, node);
- }
- }
- public static showGradually(node: cc.Node, duration = 1, delay = 0, endOpacity = 255, starOpacity = 0) {
- try {
- cc.tween(node)
- .call(() => {
- node.opacity = starOpacity;
- node.active = true;
- })
- .delay(delay)
- .to(duration, {opacity: endOpacity})
- .start()
- } catch (e) {
- node.opacity = endOpacity;
- GameLog.error('showGradually异常', e, node);
- }
- }
- public static hideGradually(node: cc.Node, duration = 1, delay = 0, endOpacity = 50) {
- try {
- node.active = true;
- cc.tween(node)
- .delay(delay)
- .to(duration, {opacity: endOpacity}, {easing: 'quartIn'})
- .call(() => {
- node.active = false;
- node.opacity = 255;
- })
- .start()
- } catch (e) {
- node.opacity = endOpacity;
- GameLog.error('showGradually异常', e, node);
- }
- }
- }
|