在動態設計中,「彈跳」與「緩衝過衝」雖然視覺相似,但底層物理模型截然不同。本文深入解析兩者數學原理,並提供可直接套用的表達式代碼,助你製作符合物理直覺的專業級動畫。
| 特性 | 緩衝過衝 | 彈跳 |
|---|---|---|
| 物理模型 | 諧波震盪(彈簧/擺) | 能量遞減的拋物線序列 |
| 頻率 | 恆定(共振頻率) | 幅度減小時頻率增加 |
| 波形 | 指數衰減正弦波 | 一系列幅度遞減的拋物線 |
基礎指數衰減正弦波:
amp = 80;
freq = 1;
decay = 1;
t = time - inPoint;
amp * Math.sin(t * freq * Math.PI * 2) / Math.exp(t * decay);
進階版:匹配進入速度的過衝(適用於關鍵幀動畫結尾自動添加過衝)
freq = 3;
decay = 5;
t = time - inPoint;
startVal = [0,0];
endVal = [200,200];
dur = 0.1;
if (t < dur) {
linear(t, 0, dur, startVal, endVal);
} else {
amp = (endVal - startVal) / dur;
w = freq * Math.PI * 2;
endVal + amp * (Math.sin((t-dur)*w) / Math.exp(decay*(t-dur)) / w);
}

直接貼在任意可打關鍵幀屬性(位置、縮放、旋轉等)即可:
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
textIndex 隨機延遲,製作 3D 字元依序彈出並過衝定格。關鍵參數調教心法:頻率越高、衰減越大,過衝越快收斂;想要明顯過衝可降低頻率或提高進入速度。建議先用
freq=3, decay=5微調。