颜色后期

您现在的位置是:首页 > 教程分享 > 软件教程

软件教程

AE表达式、会玩这个小球,一样优秀!

2022-08-13 00:42软件教程

接触过 AE 的同学肯定都听说过表达式这个名词,它是一段基于 JavaScript 的代码,听起来是不是很不明觉历?对于编程小白来讲,看起来好像也不算太友好,不过没关系,只要我们会用它就可以,并不需要了解其原理一样。

在一些特殊情况下,表达式能够帮助我们快速实现效果,减少了反复 k 关键帧的繁琐工作,因此,可以极大地提高作图效率。接下来我们一起看看如何使用表达式。

添加表达式非常的简单,先找到需要添加表达式的属性,按住Alt/Option键点击左边的码表,属性右边的数字会变成红色。

在时间轴面板里,输入表达式内容

而在属性旁边的小箭头上,也有一些自带的菜单,可以直接使用。

1.随机抖动

wiggle(x,y),其中:x = 频率 y = 范围

这个表达式可以轻松实现抖动效果,例如下图这个小球,我们给它的位置属性添加上抖动表达式,设置为 2,y 设置为30,

这样,小球就会缓慢的运动起来

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

弹性表达式看起来复杂,不过没关系,我们只要会用它就可以。先添加缩放关键帧,给小球制作一个简单的放大效果。

然后,给关键帧添加上缓动,并且在速度曲线面板,把结尾处的速度曲线拉高。

 

接着,复制弹性表达式,粘贴进小球的缩放属性里。

小球在放大的时候就会有弹跳效果了

3.循环运动

loopOut(type = “cycle”, numKeyframes = 0)

这个表达式可以让物体循环运动起来,先做一个左右移动的效果

给位置属性添加上循环表达式

这样,小球就会在工作区的范围内,反复左右横跳了。

4.挤压拉伸

spd =20;maxDev =10;
decay = 1;
t = time – inPoint;
offset = maxDev*Math.sin(t*spd)/Math.exp(t*decay);
scaleX = scale[0] + offset;scaleY = scale[1] – offset;
[scaleX,scaleY]

spd表示挤压拉伸的速度,maxDev表示挤压拉伸的大小,decay表示衰减。不用 k 关键帧,只要在缩放属性复制上上述表达式,就可以了。

5.小球回弹

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 bounceswhile (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

看起来好复杂的一个表达式,没关系,只要键盘上有 c 和 v 就可以了先给小球做一个落地的位置变化。

然后,给位置属性添加上表达式,这样,它就落地回弹了。

6.无限旋转 

time*360  数值=每秒旋转多少度,其中 time只能应用于一维属性。

对于旋转参数来讲,360是指每秒可以旋转一圈,在没有 k 关键帧的情况下,就能实现无限旋转动画。

7.路径循环 

valueAtTime(time%key(numKeys).time)

8.双向循环 

loopOut(type = “pingPong”, numKeyframes = 0);

9.随机循环 

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)

频率、幅度、循环时间都是可以修改的

文章评论