打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
AE表达式简介(二)
解析表达式

简单的说表达式就是为特定参数赋予特定值的一条或一组语句,最简单的表达式就是一个数值:6; 当然了,这种表达式的用处不是很大,常量通过调整参数的值来实现就可以了,像下面这种变量表达式用处会更大:rotation;

当执行该语句时,AE的表达式会自动计算当前图层当前时间的旋转参数值,返回的值会赋予表达式连接的参数值。 如果表达式应用于图层的不透明度属性,那么该图层的不透明度属性会随着旋转属性同步变化,当旋转三十度的时候,图层不透明度也会被设置为30%。

AE中的表达式以Javascript语言为基础,Javascript包括一套丰富的语言工具来创建更复杂的表达式,当然包括最基本的数学运算:opacity*10;
意思就是当前图层在当前时间的不透明度参数乘以10,因为不透明度参数的值阈是0~100,所以该表达式的之余就是0~1000,该值将赋予表达式连接的任何参数。

等号的位置

也许你认为表达式应该是这种形式,“position=rotation”,AE中的表达式不需要使用等于号将其赋予参数,为参数添加表达式的时候,直接将计算出来的结果赋予参数。当然,你也可以在表达式中使用等于号,为参数赋变量值。

表达式、参数值一一对应

一句表达式控制一个参数,因为一句表达式仅连接在一个参数上,它仅将值赋予该参数。例如,你不可以使用一句表达式来同时修改一个图层的位置和旋转值;你只有创建两个区分开来的关键帧,一个连接到位置属性上,另一个连接到旋转属性上。

多行表达式

表达式可以以多条语句的形式来组织书写。

当表达式由多条语句组成的时候,最后一行语句所计算出来的值将赋予表达式连接的参数,如下面的表达式:
offset=30;
ralph=rotation+offset;
ralph;

该表达式组将会使图层的旋转值设置为当前时间的旋转值加上30度。

为参数加入表达式

有两种方法为选择的参数加入表达式,一种方法是在时间轴选择参数后,从动画菜单中选择增加表达式;另一种方法 是按住ALT键的同时鼠标左键单击参数左边的马表,快速为参数加入表达式。



加入表达式后,你会发现时间轴发生了变化:




首先,在参数名称的左侧多了一个带有“=”的按钮,单击该按钮来切换表达式的使能状态。
其次,参数值变为红色,表示该参数由表达式控制,手动编辑该参数将失效。
第三,在参数名称的右边增加了并排的三个图标(稍后讨论)。
最后,在时间轴中增加了一个表达式编辑区域,该区域可以通过下拉箭头来改变显示范围。
单击第一个图标按钮会在时间轴窗口中打开表达式的变化图表,从中你可以观察到参数值的变化曲线和参数变化的加速度。如果表达式影响到元素的运动路径,那么合成窗口中显示的路径曲线也会发生变化。
第二个图标按钮是拾取线一个帮助你书写表达式的工具,只需要简单的将拾取线拖动到另一个参数上面,就可以为当前参数与拾取的参数建立动态连接关系,在后面的教程中详细讲解拾取线的功能。
第三个按钮是表达式结构下拉菜单,使用该菜单可以方便的参考AE的表达式语言,使用该菜单可以清晰的看到表达式所影响的属性和元素。

拾取线

使用拾取线可以方便的建立参数间的连接表达式:


 


例如,为图层的不透明度添加表达式,然后拖动拾取线到图层旋转参数上就会为不透明度与旋转参数建立动态连接,现在再为旋转参数设置关键帧,会同步影响到不透明度属性:


如果你将拾取线拖动到同一合成不同图层的属性参数上,那么AE就会创建一个稍微复杂一点的表达式,表明与哪一个图层的属性建立动态连接:


this_comp.layer("Solid 1").opacity

这个表达式首先指明合成("this_comp",然后指明该合成中的图层("solid1"),最后指明该图层被用于建立连接的属性(opacity)。

顺便说一句,拾取线没有什么特别神奇的地方,可以说它仅仅起到自动将连接的属性名称及其所属合成与图层添加到表达式文本区。你也可以亲自手写表达式,但是这种方式远远不及拾取线方便准确,特别是当需要编写较复杂的表达式时,拾取线的高效快捷更是体现的淋漓尽致。


向量、阵列、维数、索引


有时候你会发现通过拾取线创建的表达式看上去好象在重复参数,例如,如果你将位置参数的拾取线拖动到旋转参数上,你就会得到如下表式:

[rotation, rotation];

因为位置属性有两个参数(XY坐标)而旋转属性只有一个参数,建立连接关系后,表达式自动将旋转参数应用两次分别位置属性的XY坐标参数。

由两个或三个数值来描述属性的参数组叫做向量或阵列,AE中很多的属性参数是向量式的,包括位置、轴心点和缩放等属性;

与阵列对应的用单个数值来描述属性的参数叫做标量式参数。

向量与阵列:究竟向量和阵列之间有什么区别呢,你也许会注意到AE的帮助文件有时候互用这两个单词,简单的说向量是既有大小又有方向的数字阵列,其运算结果即要考虑到大小又要考虑到方向;阵列是一套独立元素的组合,阵列中可以包含任何元素,可以是物体阵列,词汇阵列或者是混合阵列:


ralph=[10, this_layer, "bob"];

也许没有人会知道上面的这种阵列会有什么用处,但是它确实是一个正确的阵列,当然在AE中我们大部分时间内遇到的是数字阵列(也叫向量)。所以,在接下来的描述中,当谈论到通用的概念和操作应用时,我们使用阵列来描述;当涉及到特殊的数字阵列时我们用向量来描述。


索引:

对于阵列来说,你可以使用阵列名加上包含数字的中括号从阵列中提取需要的单一元素,例如:position[0];

这种表达方法叫做索引注意在阵列中使用索引调用元素时,必须从0开始计数第一个元素。所以,上面的表达式就返回位置属性向量中的第一个参数——x坐标,那么position[1]就返回位置属性中的Y坐标,千万不要搞混淆了,在AE中虽然所有的调整都是从1开始的,但是当使用索引时,必须从零开始计数。


建立阵列:

如果要建立阵列,可以将数值以逗号分隔开放入中括号中:

my_vector=[10,20,30];//该表达式的意思是将一个三维数组赋予变量my_vector,该数组中包含三个元素分别是102030


维数 :


阵列中的元素个数代表阵列的维数,例如上面的my_vector是一个三维数组,位置属性是一个二维数组或三维数组(转变为三维图层)。标量式的属性如旋转和不透明度属于一维数组(准确说单一数字或者是标量数值就是一维向量)。

需要注意的是诸如位置、属性这样的多维数组或者是自定义的数组变量,不需要将他们的名字写在方括号中,AE会将其识别为数组。当要索引阵列或者是描述阵列时,需要使用方括号。


修改阵列中的一个元素



可以用如下的方式来书写位置表达式:

[position[0], position[1]];


将位置阵列中的两个参数分别提出来后,再将他们放入同一个阵列中,看上去与仅仅书写
positon的结果相同,优点是你可以使用这种结构来修改阵列中的一个元素而不影响另外元素,例如:top_of_layer=0;

[anchor_point[0], top_of_layer];


在这个表达式中,阵列中的第一个元素是轴心点的
X坐标值,第二个元素是0,如果将该值赋予轴心点属性,那么轴心点的X值将受AE的控制调整,而轴心点的Y值将始终为0


当使用这种结构时要特别注意,如果将图层设置为
3d图层,就需要重新书写表达式,将位置与轴心点Z轴考虑进去。例如,如果仍然使用上面轴心点的例子,但是这次将轴心点所在的图层设置为3D图层,AE会自动将丢失的Z轴坐标设置为0,这当然比出现程序错误要强的多,但是所得到的结果未必是我们需要的,因为表达式将忽略轴心点的Z轴坐标的变化。


再看另外一个例子,假如你将一个图层的位置属性复制到另外一个图层上,并且将该参数的
Y轴值减去100

ralph=this_comp.layer(1)

[ralph.position[0], ralph.position[1]-100];


如果这时将图层设置为
3D图层,你会发现对控制图层的Z轴所做的任何操作丝毫不会影响到受控图层的Z轴,因为表达式中没有表明Z轴的坐标值,AE会自动将其设置为0

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
OpenCV参考手册之Mat类详解(二)
R语言学习笔记
vue
AE教程,表达式新手入门免坑提示(4)
C语言中的数组与指针
PC-DMIS赋值语句,注释及阵列的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服