loopOut(type = "cycle", numKeyframes = 0)
后面的数值0用来控制从第几帧开始循环
将关键帧动画重复进行的循环效果 将关键帧动画重复进行的循环效果 比如你有关键帧1、2、3,这种循环模式就是1、2、3、1、2、3、1、2、3.....一直循环下去 |
||
loopOut(type = "cycle", numKeyframes = 0)
后面的数值0用来控制从第几帧开始循环
像乒乓球一样来回往复循环 同样,如果你有关键帧1、2、3,那么这种循环模式就是按1、2、3、3、2、1、1、2、3.....这种规律循环下去
|
||
loopOut(type="continue")
沿着最后一帧的方向和运动速度继续运动下去 这种模式相比前两种用的较少,可以便于制作动画持续缓慢运动的效果,避免动画静止, 也可以制作一些数字持续增长等效果 |
||
cycle=360;
循环旋转表达式 第一行 360 代表循环周期 第二行1 代表转速 值越大,转的越快。 |
||
amp = .1; //振幅 freq = 2.0; //频率 decay = 2.0; //阻力 n = 0; if (numKeys > 0){ n = nearestKey(time).index; if (key(n).time > time){n--;} } if (n == 0){ t = 0;} else{t = time - key(n).time;} if (n > 0){ v = velocityAtTime(key(n).time - thisComp.frameDuration/10); value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t); } else{value} 弹性表达式 这个表达式看起来很复杂,但是没关系,咱们只要会复制粘贴就好。 其中有三个关键的数值用来控制弹性的效果,需要根据自己需要的效果来调整。 amp,即振幅,用来控制弹性的幅度大小。 freq,频率,用来控制弹性抖动的快慢。 decay,阻力,也叫衰减、阻尼等,这个值越大,则弹性效果能够越快停下来。
|
||
e =0.7;//弹力 g =1000;//重力 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 弹簧(回弹)表达式 同样,这儿有三个关键数值用来控制弹性的效果, 弹力,这个值越高,则跳起的越高 重力,这个值越大,则弹的越快,同时停止的也越快 最大弹跳次数,字面意思,用来控制弹跳的次数,值越大,效果越细腻 这里的弹力和重力都是物理名词,这个效果也是模拟真实物理现象的,所以需要结合下物理知识来理解。 |
||
freq = 3; amp = 100; loopTime =3; t = time % loopTime; wiggle1 = wiggle(freq, amp, 1, 0.5, t); wiggle2 = wiggle(freq, amp, 1, 0.5, t - loopTime); linear(t, 0, loopTime, wiggle1, wiggle2)
随机循环 让随机抖动的效果能够形成循环
第一行 频率
第二行 幅度
第三行 循环时间,单位为秒 |