393 lines
9.3 KiB
JavaScript
393 lines
9.3 KiB
JavaScript
|
|
"use strict";
|
||
|
|
cc._RF.push(module, '581d4g4UqNNJ6dZi3gVqXrP', 'nx.tween');
|
||
|
|
// Scripts/nx/kernel/nx.tween.js
|
||
|
|
|
||
|
|
"use strict";
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
*
|
||
|
|
* Nx 动作Tween
|
||
|
|
*
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* 2021.12.10
|
||
|
|
******************************************************************************/
|
||
|
|
|
||
|
|
var NxObject = require("nx.object");
|
||
|
|
var nxTween = cc.Class({
|
||
|
|
"extends": NxObject,
|
||
|
|
name: "nxTween",
|
||
|
|
// 初始化
|
||
|
|
initialize: function initialize(_args) {
|
||
|
|
// USPER
|
||
|
|
if (!this._super(_args)) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 全局服务开启
|
||
|
|
nx.tween = this;
|
||
|
|
return true;
|
||
|
|
},
|
||
|
|
// 销毁
|
||
|
|
uninitialize: function uninitialize() {
|
||
|
|
// 全局服务关闭
|
||
|
|
nx.tween = null;
|
||
|
|
|
||
|
|
// USPER
|
||
|
|
return this._super();
|
||
|
|
},
|
||
|
|
// 淡进
|
||
|
|
fadeIn: function fadeIn(_refnode, _names, _secs, _cb, _to, _from) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
nx.dt.fnInvoke(_cb);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 参数补全
|
||
|
|
var cb = _cb || nx.dt.fnEmpty;
|
||
|
|
var opTo = nx.dt.numFix(_to, 255);
|
||
|
|
var opFrom = nx.dt.numFix(_from, 0);
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_fade) {
|
||
|
|
node.__tween_fade.stop();
|
||
|
|
delete node.__tween_fade;
|
||
|
|
node.__tween_fade = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 执行
|
||
|
|
node.active = true;
|
||
|
|
node.opacity = opFrom;
|
||
|
|
node.__tween_fade = cc.tween(node).to(_secs, {
|
||
|
|
opacity: opTo
|
||
|
|
}).call(cb).start();
|
||
|
|
},
|
||
|
|
// 淡出
|
||
|
|
fadeOut: function fadeOut(_refnode, _names, _secs, _cb, _to, _from) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
nx.dt.fnInvoke(_cb);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 参数补全
|
||
|
|
var cb = _cb || nx.dt.fnEmpty;
|
||
|
|
var opTo = nx.dt.numFix(_to, 0);
|
||
|
|
var opFrom = nx.dt.numFix(_from, node.opacity);
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_fade) {
|
||
|
|
node.__tween_fade.stop();
|
||
|
|
delete node.__tween_fade;
|
||
|
|
node.__tween_fade = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 执行
|
||
|
|
node.active = true;
|
||
|
|
node.opacity = opFrom;
|
||
|
|
node.__tween_fade = cc.tween(node).to(_secs, {
|
||
|
|
opacity: opTo
|
||
|
|
}).call(cb).start();
|
||
|
|
},
|
||
|
|
// 贝塞尔计算
|
||
|
|
bezier: function bezier(_start, _end, _height, _t) {
|
||
|
|
var t1 = (1 - _t) * (1 - _t);
|
||
|
|
var t2 = 2 * _t * (1 - _t);
|
||
|
|
var t3 = _t * _t;
|
||
|
|
var p1 = cc.v2(_start.x + (_end.x - _start.x) / 2, _start.x + _height);
|
||
|
|
return _start.mul(t1).add(p1.mul(t2)).add(_end.mul(t3));
|
||
|
|
},
|
||
|
|
/**
|
||
|
|
* 贝塞尔位移淡出
|
||
|
|
* @param {*} _secs 移动耗时
|
||
|
|
* @param {*} _delay 移动延迟
|
||
|
|
* @param {*} _to 目标点
|
||
|
|
* @param {*} _from 起始点
|
||
|
|
* @param {*} _scale 目标缩放
|
||
|
|
* @param {*} _opacity 目标透明度
|
||
|
|
* @param {*} _h 贝塞尔幅度
|
||
|
|
* @returns
|
||
|
|
*/
|
||
|
|
fadeOutBezier: function fadeOutBezier(_refnode, _names, _secs, _delay, _cb, _to, _from, _scale, _opacity, _h) {
|
||
|
|
if (_scale === void 0) {
|
||
|
|
_scale = 1;
|
||
|
|
}
|
||
|
|
if (_opacity === void 0) {
|
||
|
|
_opacity = 255;
|
||
|
|
}
|
||
|
|
if (_h === void 0) {
|
||
|
|
_h = 200;
|
||
|
|
}
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
nx.dt.fnInvoke(_cb);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 初始
|
||
|
|
var rop = node.opacity;
|
||
|
|
var rsc = node.scale;
|
||
|
|
node.opacity = 0;
|
||
|
|
node.position = _from;
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_fadeOutBezier) {
|
||
|
|
node.__tween_fadeOutBezier.stop();
|
||
|
|
delete node.__tween_fadeOutBezier;
|
||
|
|
node.__tween_fadeOutBezier = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 行动
|
||
|
|
var self = this;
|
||
|
|
cc.Tween.stopAllByTarget(node);
|
||
|
|
node.__tween_fadeOutBezier = cc.tween(node).delay(_delay).to(_secs * 0.1, {
|
||
|
|
scale: rsc * 1.1,
|
||
|
|
opacity: rop
|
||
|
|
}).to(_secs * 0.1, {
|
||
|
|
scale: rsc
|
||
|
|
}).delay(_secs * 0.3).to(_secs * 0.5, {
|
||
|
|
scale: rsc * _scale,
|
||
|
|
opacity: _opacity,
|
||
|
|
position: {
|
||
|
|
value: _to,
|
||
|
|
progress: function progress(_s, _e, _c, _t) {
|
||
|
|
return self.bezier(_s, _e, _h, _t);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}).call(function () {
|
||
|
|
nx.dt.fnInvoke(_cb, node);
|
||
|
|
}).start();
|
||
|
|
},
|
||
|
|
/**
|
||
|
|
* 无限旋转
|
||
|
|
* @param {*} _refnode
|
||
|
|
* @param {*} _names
|
||
|
|
* @param {*} _speed
|
||
|
|
*/
|
||
|
|
rotateForever: function rotateForever(_refnode, _names, _speed) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_rotateForever) {
|
||
|
|
node.__tween_rotateForever.stop();
|
||
|
|
delete node.__tween_rotateForever;
|
||
|
|
node.__tween_rotateForever = null;
|
||
|
|
}
|
||
|
|
node.__tween_rotateForever = cc.tween(node).repeatForever(cc.tween().by(_speed, {
|
||
|
|
angle: 360
|
||
|
|
})).start();
|
||
|
|
},
|
||
|
|
/**
|
||
|
|
* 无限呼吸
|
||
|
|
* @param {*} _refnode
|
||
|
|
* @param {*} _names
|
||
|
|
* @param {*} _speed
|
||
|
|
* @param {*} _scale 呼吸幅度
|
||
|
|
*/
|
||
|
|
breatheForever: function breatheForever(_refnode, _names, _speed, _scale) {
|
||
|
|
if (_scale === void 0) {
|
||
|
|
_scale = 0.1;
|
||
|
|
}
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_breatheForever) {
|
||
|
|
node.__tween_breatheForever.stop();
|
||
|
|
delete node.__tween_breatheForever;
|
||
|
|
node.__tween_breatheForever = null;
|
||
|
|
node.scale = node.breathScale || 1;
|
||
|
|
}
|
||
|
|
node.breathScale = node.scale;
|
||
|
|
var smaller = node.scale - _scale;
|
||
|
|
var bigger = node.scale + _scale;
|
||
|
|
node.__tween_breatheForever = cc.tween(node).repeatForever(cc.tween().to(_speed / 4, {
|
||
|
|
scale: bigger
|
||
|
|
}).to(_speed / 2, {
|
||
|
|
scale: smaller
|
||
|
|
}).delay(_speed / 4)).start();
|
||
|
|
},
|
||
|
|
/**
|
||
|
|
* 移动
|
||
|
|
* @param {*} _refnode
|
||
|
|
* @param {*} _names
|
||
|
|
* @param {*} _secs
|
||
|
|
* @param {*} _pos
|
||
|
|
*/
|
||
|
|
moveTo: function moveTo(_refnode, _names, _secs, _pos, _cb) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_moveTo) {
|
||
|
|
node.__tween_moveTo.stop();
|
||
|
|
delete node.__tween_moveTo;
|
||
|
|
node.__tween_moveTo = null;
|
||
|
|
}
|
||
|
|
node.__tween_moveTo = cc.tween(node).to(_secs, {
|
||
|
|
position: _pos
|
||
|
|
}).call(function () {
|
||
|
|
nx.dt.fnInvoke(_cb, node);
|
||
|
|
}).start();
|
||
|
|
},
|
||
|
|
/**
|
||
|
|
* 缓移动
|
||
|
|
* @param {*} _refnode
|
||
|
|
* @param {*} _names
|
||
|
|
* @param {*} _secs
|
||
|
|
* @param {*} _pos
|
||
|
|
*/
|
||
|
|
moveToEasing: function moveToEasing(_refnode, _names, _secs, _pos, _key, _cb) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_moveTo) {
|
||
|
|
node.__tween_moveTo.stop();
|
||
|
|
delete node.__tween_moveTo;
|
||
|
|
node.__tween_moveTo = null;
|
||
|
|
}
|
||
|
|
node.__tween_moveTo = cc.tween(node).to(_secs, {
|
||
|
|
position: {
|
||
|
|
value: _pos,
|
||
|
|
easing: _key
|
||
|
|
}
|
||
|
|
}).call(function () {
|
||
|
|
nx.dt.fnInvoke(_cb, node);
|
||
|
|
}).start();
|
||
|
|
},
|
||
|
|
/**
|
||
|
|
* 缩放
|
||
|
|
* @param {*} _refnode
|
||
|
|
* @param {*} _names
|
||
|
|
* @param {*} _secs
|
||
|
|
* @param {*} _pos
|
||
|
|
*/
|
||
|
|
scaleTo: function scaleTo(_refnode, _names, _secs, _x, _y, _cb) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_scaleTo) {
|
||
|
|
node.__tween_scaleTo.stop();
|
||
|
|
delete node.__tween_scaleTo;
|
||
|
|
node.__tween_scaleTo = null;
|
||
|
|
}
|
||
|
|
node.__tween_scaleTo = cc.tween(node).to(_secs, {
|
||
|
|
scaleX: _x,
|
||
|
|
scaleY: _y
|
||
|
|
}).call(function () {
|
||
|
|
nx.dt.fnInvoke(_cb, node);
|
||
|
|
}).start();
|
||
|
|
},
|
||
|
|
// 淡进
|
||
|
|
delayFadeIn: function delayFadeIn(_refnode, _names, _delay, _secs, _cb, _to, _from) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
nx.dt.fnInvoke(_cb);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 参数补全
|
||
|
|
var cb = _cb || nx.dt.fnEmpty;
|
||
|
|
var opTo = nx.dt.numFix(_to, 255);
|
||
|
|
var opFrom = nx.dt.numFix(_from, 0);
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_fade) {
|
||
|
|
node.__tween_fade.stop();
|
||
|
|
delete node.__tween_fade;
|
||
|
|
node.__tween_fade = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 执行
|
||
|
|
node.active = true;
|
||
|
|
node.opacity = opFrom;
|
||
|
|
node.__tween_fade = cc.tween(node).delay(_delay).to(_secs, {
|
||
|
|
opacity: opTo
|
||
|
|
}).call(cb).start();
|
||
|
|
},
|
||
|
|
/**
|
||
|
|
* 抖动
|
||
|
|
* @param {*} _refnode
|
||
|
|
* @param {*} _names
|
||
|
|
* @param {*} _secs
|
||
|
|
* @param {*} _offset
|
||
|
|
*/
|
||
|
|
shake: function shake(_refnode, _names, _secs, _offset, _cb) {
|
||
|
|
// 找不到节点
|
||
|
|
var node = nx.gui.find(_refnode, _names);
|
||
|
|
if (!node) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 销毁
|
||
|
|
if (node.__tween_shake) {
|
||
|
|
node.__tween_shake.stop();
|
||
|
|
delete node.__tween_shake;
|
||
|
|
node.__tween_shake = null;
|
||
|
|
}
|
||
|
|
var raw = node.position;
|
||
|
|
var ofx = _offset ? _offset.x : 10;
|
||
|
|
var ofy = _offset ? _offset.y : 10;
|
||
|
|
var secs = _secs || 1;
|
||
|
|
var times = Math.ceil(secs / 0.2);
|
||
|
|
var rand = function rand(_x) {
|
||
|
|
var ofs = _x ? ofx : ofy;
|
||
|
|
var ret = nx.dt.randomRange(-ofs, ofs);
|
||
|
|
if (Math.abs(ret) < ofs / 2) {
|
||
|
|
ret *= 2;
|
||
|
|
}
|
||
|
|
return _x ? raw.x + ret * 2 : raw.y + ret * 2;
|
||
|
|
};
|
||
|
|
node.__tween_shake = cc.tween(node).repeat(times, cc.tween().to(0.03, {
|
||
|
|
x: rand(true),
|
||
|
|
y: rand(false)
|
||
|
|
}).to(0.03, {
|
||
|
|
x: rand(true),
|
||
|
|
y: rand(false)
|
||
|
|
}).to(0.03, {
|
||
|
|
x: rand(true),
|
||
|
|
y: rand(false)
|
||
|
|
}).to(0.03, {
|
||
|
|
x: rand(true),
|
||
|
|
y: rand(false)
|
||
|
|
}).to(0.03, {
|
||
|
|
x: rand(true),
|
||
|
|
y: rand(false)
|
||
|
|
}).to(0.03, {
|
||
|
|
x: rand(true),
|
||
|
|
y: rand(false)
|
||
|
|
})).to(0.03, {
|
||
|
|
position: raw
|
||
|
|
}).call(function () {
|
||
|
|
nx.dt.fnInvoke(_cb, node);
|
||
|
|
}).start();
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 模块导出
|
||
|
|
module.exports = nxTween;
|
||
|
|
|
||
|
|
cc._RF.pop();
|