彈性表示式
彈性表示式,Bounce 和 Overshoot!利用這個兩個表示式你可以輕而易舉地實現各種彈性動畫,如抖動、彈跳動畫等。是的,你沒聽錯,只要998個贊,你就能輕鬆獲得隨意加彈性Buff!趕快拿起你的滑鼠點贊吧!
表示式的是國外大神寫出來的,感謝大神的分享,我們只能膜拜了!而且作者非常無私的貼出了兩個(Bounce & Overshoot)可以直接進行關鍵幀的表示式,再次膜拜(室友問我為什麼跪著打字)。後面我會提到怎麼去快速理解和掌握這個彈性兩個表示式。
首先我們先來了解一下什麼是Bounce 和 Overshoot吧!
Bounce 效果(重力效果)
Overshoot 效果(彈性效果)
我可以簡單將:
·Bounce 理解為“反彈、類似重力作用”,如 皮球落地反彈的效果;
·Overshoot(過沖、誇張的)理解為“抖動”,如 果凍抖動的效果。
說了這麼多,我們來看錶達式的真容吧!
Overshoot(彈性表示式–加上後你的效果就是Q彈Q彈的)
freq = 3;
decay = 5;
n = 0;
if (numKeys > 0){
n = nearestKey(time)。index;
if (key(n)。time > time) n——;
}
if (n > 0){
t = time - key(n)。time;
amp = velocityAtTime(key(n)。time - 。001);
w = freq*Math。PI*2;
value + amp*(Math。sin(t*w)/Math。exp(decay*t)/w);
}else
value
Bounce Back(重力反彈表示式–加上後你的效果就是蹦躂蹦躂的)
e = 。7;
g = 5000;
nMax = 9;
n = 0;
if (numKeys > 0){
n = nearestKey(time)。index;
if (key(n)。time > time) n——;
}
if (n > 0){
t = time - key(n)。time;
v = -velocityAtTime(key(n)。time - 。001)*e;
vl = length(v);
if (value instanceof Array){
vu = (vl > 0) ? normalize(v) : [0,0,0];
}else{
vu = (v
}
tCur = 0;
segDur = 2*vl/g;
tNext = segDur;
nb = 1; // number of bounces
while (tNext
vl *= e;
segDur *= e;
tCur = tNext;
tNext += segDur;
nb++
}
if(nb
delta = t - tCur;
value + vu*delta*(vl - g*delta/2);
}else{
value
}
}else value
AE如何使用表示式
第一步,將上面兩套表示式ctrl+c複製到你的筆記中,方便你的隨時隨地的呼叫它。
看到這步,恭喜你!你已經學會了80%了。
下面我將拿用的最多的彈性效果來舉例吧。
step 1:為要做動畫的物體打關鍵幀
(位置移動,縮放,透明度都行,我們以位移為例)
未加表示式的勻速運動效果(是不是很生硬):
step 2:複製彈性表示式
freq = 3;
decay = 5;
n = 0;
if (numKeys > 0){
n = nearestKey(time)。index;
if (key(n)。time > time) n——;
}
if (n > 0){
t = time - key(n)。time;
amp = velocityAtTime(key(n)。time - 。001);
w = freq*Math。PI*2;
value + amp*(Math。sin(t*w)/Math。exp(decay*t)/w);
}else
value
step 3:按住ALT鍵點選關鍵幀碼錶,把表示式複製進去。大功告成!