·Bounce 理解為“反彈”,如 皮球落地反彈的效果衣赶;
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?<?0)???-1?:?1;
}
tCur?=?0;
segDur?=?2*vl/g;
tNext?=?segDur;
nb?=?1;?//?number?of?bounces
while?(tNext?<?t?&&?nb?<=?nMax){
vl?*=?e;
segDur?*=?e;
tCur?=?tNext;
tNext?+=?segDur;
nb++
}
if(nb?<=?nMax){
delta?=?t?-?tCur;
value?+? vu*delta*(vl?-?g*delta/2);
}else{
value
}
}else? value
·Overshoot(過沖调缨、夸張的)理解為“抖動(dòng)”慨菱,如 果凍抖動(dòng)的效果燃箭。
Keyframe Overshoot
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
幾個(gè)要點(diǎn)
1、關(guān)鍵幀的速度值及表達(dá)式中的頻率(freq)鸥咖、衰減(decay)共同來控制的燕鸽。
2、想要表達(dá)式正常工作啼辣,就要給最后一個(gè)關(guān)鍵幀一個(gè)速度值啊研,最后一個(gè)關(guān)鍵幀的速度值將會(huì)很大程度的影響表達(dá)式的抖動(dòng)效果。當(dāng)感覺抖動(dòng)效果不明顯時(shí),也可以試試改變一下關(guān)鍵幀速率党远。最后一幀的速度越大抖動(dòng)效果越明顯削解。
3、給表達(dá)式顯示范圍