- 1 -
AE中的表达式
一、表达式概述
当我们想要创建和链接复杂的动画,却又不想创建许许多多的关键帧时,可使用表达式。表达式很像一个小软件,具体讲像javascript,可以在某个时间点对某个图层的某个属性值进行计算。scripts告诉一个app去做些什么,而表达式是针对属性的。
使用表达式,可以在图层的属性间创建关联、用一个属性的关键帧来动态地对其它图层产生动画….
表达式语言是基于javascript的,但你不必非得掌握javascript才能使用表达式,可用pick whip来链接属性,或拷贝已有的表达式到表达式栏中并加以修改即可。
动画预设也包括表达式,甚至完全是表达式。使用表达式而不是关系帧的动画预设有时被叫作“行为”(behaviors)。
向属性添加了表达式后,可继续为该属性添加或编辑关键帧。表达式可使用由该属性的关键帧生成的值作为它的输入值,然后用该值生成一个新值(即在自身上操作),例如下边的表达式在rotation关键帧动画后又在rotation值上加了90度:
value+90
有些方法—如wiggle---直接对关键帧属性值进行操作(参见属性和方法表达式参考)。
下面的表达式作用于一个图层的位置属性,使得图层位置发生一点点抖动。 wiggle(10,10)
注意:使用wggle表达式比用Wiggler面板要快捷、容易。
对文字进行动画时,可使用Expression selector来指定animator属性对每个字符产生多大的影响,可向同个animator组添加一个或多个Expression selector,该animator组可包含一个或多个属性。
二、添加、编辑和移除表达式
可手动键入、用Expression Language菜单、用pick whip或从其它属性的已
2014年全国注册建造师考试 建设工程造价管理 建设工程计价 建设工程造价案例分析 建设工程技术与计量
- 2 -
有表达式中拷贝来创建表达式。
Expression interface in the Timeline panel in layer bar mode A. 启用表达式开关
B. 显示 Post-Expression Graph按钮 C. Pick whip
D. Expression Language 菜单 E. 表达式输入框 Expression field
比较常用的做法是用pick whip链接不同的属性,然后运用简单数学运算符对表达式进行适当调整:
+:加、-:减、*:乘、/:除、*-1:对原初执行反操作,例如顺时针及逆时针等。
添加、禁用或移除一个表达式:
(1)添加:在时间轴面板上选择一个属性?选择“Animation”菜单?Add
Expression或按Alt+Shift+=,或按Alt同时点击属性名左边的秒表(关键帧记录器)。
(2)禁用:暂时禁用表达式,点击上图中的A按钮,禁用时A变为。
(3)移除:选择有表达式的属性?Animation菜单?Remove Expression或按Alt同时点击属性名左边的秒表(关键帧记录器)。
编辑用pick whip生成的表达式:
如对javaScript或AE 表达式语言不熟悉,可用pick whip来充分利用表达
- 3 -
式的强大功能:从一个属性拖动到另个属性上,则表达式文本就自动出现在表达式输
入框中。
(1)点击生成的表达式,进入文本编辑模式 (2)进行编辑,偶尔使用Expression Language菜单
(3)退出文本编辑模式:按小键盘上的Enter键或在表达式输入框的外边点击鼠标
实例:用expression language菜单创建表达式 (1) 建两个solid层:solid1和solid2 (2) 用关键帧对solid1进行位置动画
(3) 选择solid2的position属性后,选择expression language菜单?add
expressions或Alt同时点击秒表:则出现默认的表达式---transform.position。
(4) 修改上边生成的表达式为:
thisComp.layer(1).position.valueAtTime(time+2)。
三、显示表达式和表达式曲线图(graph)
在曲线图编辑模式下,单个的表达式输入框变为曲线编辑器底部的一个可调大小的框并只显示已选择属性的表达式。要同时显示出多个表达式,时间轴必须处于图层模式。
四、在Text图层的Source Text属性上写表达式
- 4 -
text图层的Source Text属性的类型是JavaScript String,可用pick whip从另个text图层取得文本,只使用目的层的第一个字符的格式。
关于JavaScript String的更多知识,参考JavaScript书籍。
在字符串中可用 “\r” 来开始一新行文本,例如:把一图层上的文本进行复制并拷贝到该图层上,在另一行显示并变成大写的,用下边代码:
text.sourceText + "\r" + text.sourceText.toUpperCase()
向一个comp添加一个text图层,然后向该图层的source text属性添加表达式经常用来检查其它图层的属性及属性值:
thisComp.layer(index + 1).name + "\rOpacity = " + thisComp.layer(index + 1).opacity.value
下段代码用于报告使用的footage的名字,该footage处于堆栈最上方…
source_footage_name = "";
for (i = 1; i = my_layer.inPoint && time
- 5 -
source_footage_name
五、向表达式添加注释(与Java语法一样) // :用于添加单行注释
/* */ :用于添加多行注释
六、保存并重用表达式
写好的表达式可拷贝到一个文本编辑软件中进行保存,也可在AE中存作动画预置(animation preset)或模板(template)中。然而,表达式多数时候是针对某个项目编写的,会用到该项目中的具体图层名字等,所以在下次使用时还需进行必要的改动。
可定义自己的方法,JavaScript定义方法的语法见下例:
function average(a, b) {
return (a + b) / 2; }
average(position, thisComp.layer(1).position);
注意:必须在表达式中完整定义方法,没有向其中添加方法的全局方法库。
如果想保存一段代码以便可用于其它项目,应该添加注释,也应该使用变量,这样就可在一处改变一个值,而不是在好几个地方去做改动。
例如:
/* This expression on a Source Text property reports the name of a layer and the value of its Opacity property. */
var myLayerIndex = 1; // layer to inspect, initialized to 1, for top layer thisComp.layer(myLayerIndex).name+":\rOpacity="+ thisComp.layer(myLayerIndex).opacity.value
只要表达式中不含有其它项目中没有的属性,就可保存含有表达式的动画预