AEJoy —— 表达式之归位(复位)模拟详解【JS】
【摘要】
效果图
归位(back)
表达式代码与注释
var s = 1.70158; ///< 用于 "归位" 的超越量
/// @note 归位函数
function outBack(t, b...
效果图
归位(back)
表达式代码与注释
var s = 1.70158; ///< 用于 "归位" 的超越量
/// @note 归位函数
function outBack(t, b, c, d) {
if (s == null)
s = 1.70158;
return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
}
/// @note 实际调用弹性函数的缓动函数
function easeAndWizz() {
var n = 0;
/// @note 确保关键帧帧数是大于 0 的
if (numKeys > 0) {
n = nearestKey(time).index; ///< 获取最近的关键帧索引
if (key(n).time > time) { ///< 如果最近的关键帧所处时间在当前时间之后(即时间还没到)
n--; ///< 则取前一个关键帧的索引
}
}
try {
/// @note 前后两个关键帧
var key1 = key(n);
var key2 = key(n + 1);
} catch (e) {
return null;
}
/// @note 确定关键帧需要的数据维度
var dim = 1; ///< 该属性至少是一维的
try {
key(1)[1]; ///< 数据有第二维度
dim = 2;
key(1)[2]; ///< 数据有第三维度
dim = 3;
} catch (e) { }
t = time - key1.time; ///< 当前时间和前一个关键帧的时间差
d = key2.time - key1.time; ///< 前后俩关键帧的时间差
/// @note 计算关键帧上的属性,用于后期的弹性计算
/// 一维
sX = key1[0];
eX = key2[0] - key1[0];
/// @note 二维
if (dim >= 2) {
sY = key1[1];
eY = key2[1] - key1[1];
/// @note 三维
if (dim >= 3) {
sZ = key1[2];
eZ = key2[2] - key1[2];
}
}
if ((time < key1.time) || (time > key2.time)) {
return value;
} else {
/// @note 进行归位计算
val1 = outBack(t, sX, eX, d);
/// @note 同样分为三个维度进行计算
switch (dim) {
case 1:
return val1;
break;
case 2:
val2 = outBack(t, sY, eY, d);
return [val1, val2];
break;
case 3:
val2 = outBack(t, sY, eY, d);
val3 = outBack(t, sZ, eZ, d);
return [val1, val2, val3];
break;
default:
return null;
}
}
}
(easeAndWizz() || value);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/121763675
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)