const { ccclass, property } = cc._decorator; /** * 动画工具类 * @author 薛鸿潇 */ @ccclass export default class TweenUtil { /** * 缓动类型 */ public easing: typeof TweenEasing = TweenEasing /** * 缩放效果 * @param node 动画节点 * @param time 动画时间 * @param start_scale 起始缩放属性 * @param end_scale 目标缩放属性 * @param complete_fun 完成回调 */ public scale(node: cc.Node, time: number = 0.15, start_scale: number = 0, end_scale: number = 1, complete_fun?: Function, easing?: keyof typeof TweenEasing) { node.scale = start_scale; let scale1 = cc.tween().to(time, { scale: end_scale }, { easing: easing }); let call1 = cc.tween().call(() => { if (typeof complete_fun == 'function') complete_fun(); }) cc.tween(node).then(scale1).then(call1).start() } /** * 缩放效果 * @param node 动画节点 * @param time 动画时间 * @param start_scale 起始缩放属性 * @param end_scale 目标缩放属性 * @param complete_fun 完成回调 */ public scaleX(node: cc.Node, time: number = 0.15, start_scale: number = 0, end_scale: number = 1, complete_fun?: Function, easing?: keyof typeof TweenEasing) { node.scaleX = start_scale; let scale1 = cc.tween().to(time, { scaleX: end_scale }, { easing: easing }); let call1 = cc.tween().call(() => { if (typeof complete_fun == 'function') complete_fun(); }) cc.tween(node).then(scale1).then(call1).start() } /** * 缩放移动效果 * @param node 动画节点 * @param time 动画时间 * @param start_scale 起始缩放属性 * @param end_scale 结束缩放属性 * @param end_pos 结束节点位置 * @param complete_fun 完成回调 */ public scaleParallelMove(node: cc.Node, time: number = 0.15, start_scale: number = 0, end_scale: number = 1, end_pos: cc.Vec2 = cc.Vec2.ZERO, complete_fun?: Function) { node.scale = start_scale; let scale1 = cc.tween().to(time, { scale: end_scale }); let pos1 = cc.tween().to(time, { position: new cc.Vec3(end_pos.x, end_pos.y, 0) }); let call1 = cc.tween().call(() => { if (typeof complete_fun == 'function') complete_fun(); }) let parallel = cc.tween().parallel(scale1, pos1) cc.tween(node).then(parallel).then(call1).start(); } /** * 移动效果 * @param node * @param time * @param complete_fun */ public move(node: cc.Node, time: number = 0.15, start_pos: cc.Vec2 = cc.Vec2.ZERO, end_pos: cc.Vec2 = cc.Vec2.ZERO, complete_fun?: Function, easing?: keyof typeof TweenEasing) { node.setPosition(start_pos); let pos1 = cc.tween().to(time, { position: new cc.Vec3(end_pos.x, end_pos.y, 0) }, { easing: easing });// cc.easeOut(3) let call1 = cc.tween().call(() => { if (typeof complete_fun == 'function') complete_fun(); }) cc.tween(node).then(pos1).then(call1).start(); } } /** * 缓动类型 */ enum TweenEasing { linear, smooth, fade, quadIn, quadOut, quadInOut, quadOutIn, cubicIn, cubicOut, cubicInOut, cubicOutIn, quartIn, quartOut, quartInOut, quartOutIn, quintIn, quintOut, quintInOut, quintOutIn, sineIn, sineOut, sineInOut, sineOutIn, expoIn, expoOut, expoInOut, expoOutIn, circIn, circOut, circInOut, circOutIn, elasticIn, elasticOut, elasticInOut, elasticOutIn, backIn, backOut, backInOut, backOutIn, bounceIn, bounceOut, bounceInOut, bounceOutIn }