目录

表达式简介

使用表达式的时机

解析表达式

为参数加入表达式

拾取线

向量与维数

参数值范围

插值方法

对象

全局对象

默认对象

方法与属性

矢量运算

实例应用

其他材料

表达式深入

参考表格

工程文件连接

返回主页

向量、阵列、维数、索引

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

[rotation, rotation];

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

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

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

向量与阵列

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

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

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

索引

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

position[0];

这种表达方法叫做索引,注意在阵列中使用索引调用元素时,必须从0开始计数第一个元素,也就是说,阵列中的第一个元素必须以阵列名加上[0]来表示, 第二个元素必须以阵列名加上[1]来表示,依次类推。

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

建立阵列

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

my_vector=[10,20,30];

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

my_vector[1];

该表达式计算得出的值是20(数组中的第二个元素)。

维数

阵列中的元素个数代表阵列的维数,例如上面的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。

阵列的重要性

为什么用如此大量的篇幅来描述阵列呢,因为在你所书写的表达式中必须提供正确的参数维数,例如仅仅给位置属性提供一个参数就是错误的

position=6;? // ?? 不正确

这条语句就是错误的,因为位置属性至少需要两个参数:

position=[320,240]; // 正确

顺便提醒一句,你完全没有必要写成这种形式“position=”,因为在书写表达式时就已经将该值赋予了连接的属性参数。

如果你所书写的表达式存在错误,书写完毕后AE会自动弹出一个错误对话框同时该表达式将被禁用。

如果要避免这种错误,你需要核实正确的参数维数,, 可以通过AE自带的帮助文档或教程后面提供的参考表格来查阅表格.

同样的如果在表达式中涉及到另外的参数,你也需要在帮助文档或者是下面的表格中查阅参数维数,你需要调整来自这些参数的值以匹配你所需要的输出维数。如果你引入了一个二维参数到一个一维数组中,你就需要调整维数以适应输出(如忽略二维数组中的一维元素)。

下面的表格中列出了AE中大部分属性参数的维数以及这些参数值的范围:

图层属性 维数 单位 理论范围 应用范围
轴心点 2* [x, y, (z)] 像素 负整数~正整数 0~图层宽度,高度
位置 2* [x, y, (z)] 像素 负整数~正整数 0~合成宽度,高度
缩放 2*[宽度,高度,(深度)] 百分比 负整数~正整数 -100 ~+100
旋转 1 角度 负整数~正整数 0~360(一个周期)
不透明度 1 百分比 0–100 0–100
朝向(3D) 3 [x, y, z] 角度 负整数~正整数 0~360(一个周期)
音量 2 [左声道,右声道] 分贝 -192–24 -48–12
环境光 1 百分比 0–100 0–100
漫反射 1 百分比 0–100 0–100
高光 1 百分比 0–100 0–100
亮度 1 百分比 0-100 0-100
* 表示当图层转换为3D时,该属性为3维.

当使用拾取线时,AE会自动通过索引向量(一维——二维)或重复标量(二维——一维)的方式矫正维数的匹配。

所有内容版权归JJ Gifford.所有,翻译权归CG频道所有,违者必纠。