方法
先附上末帧的弹性表达式:
amp=0.1;
fre来自q=2;
decay=2;
n=numKeys;
if(n==0){value;}
else{
t=time-key(起国n).time;
i360新知f(t>0){v=velocityAtTime(key(n).time-thisComp.frameDuration/10);
value+v*amp*Math.sin(freq*2*Math.PI*t)/Math.exp(decay*t);}
else{value};
}
表达式解析:
首先,
定义变量并赋值
amp =0.1;(振幅)
freq = 2.0;(频率)
decay = 2.0;(衰减)
n=numKeys;(关键帧的数量)
有两种情况,一种是n等于0,没有关键帧,直接返回物体本身位置的值,
if(n==0){value;}
另一种是当n不等于0时,也就是说key了关键帧时的情况。首先要明确以下的这些判定都是在n不等于0的条件下成立的,所以else这里用了一个嵌套。
else{
无论有几个关键帧,都希望在最后一个关键帧处开始做弹性动画,所以首先要判定指针与末帧的位置关系。
{t=time-key(n).time;}
当t>0,指针在末帧的右侧,开始做弹性动画。
if(t>0)
要让物体到达末帧后速度越来越小,直到0的时候,再返回回去,就像一个正弦运动。
首先要找到物体在末帧的速度值,因为末帧物体停止,所以此处应该找到指针在末帧左侧并无限逼近末帧时的物体的速度值。
{v=velocityAtTime(key(n).time-thisComp.frameDuration/2);
因为正弦运动是等幅的,但要让它随着时间的推移,幅度越来越小,所以要在正弦函数上除以一个随着时间推移成指数倍增大的一个值。
value+v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(d肉把明民脱他夜ecay*t);}
当t<=0时,即指针在末帧左侧,此时直接返回物体本身位置值。
else{value;}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 951076433@qq.com 举报,一经查实,本站将立刻删除。如若转载,请注明出处:https://www.xiaomafuwu.com/400026.html