AE里面,标记点有两类,分别是合成标记点,和图层标记点。
合成标记点可以通过拖拽拉到时间线上,也可以通过Shift + Number(相应数字键)添加。如 Shift + 1 ,可以添加图中所示的标签为1的标记点。
图层标记点,用小键盘上的“*”添加,或者"ctrl + 8"的快捷键添加,mac的非全尺寸键盘,使用“control + 8 ”的方式添加。
怎样访问合成标记和图层标记的值?可以用thisLayer.marker来访问图层标记点,用thisComp.marker来访问和层标记点。
能访问哪些值?
我们来先给图层打一个标记点,双击图层,弹出一个窗口:
这个窗口中所显示的值,Time,Duration,Comment,Chapter,URL等,都是可以访问的。
time
返回类型:数值。
标记所在的时间。
duration
返回类型:数值。
标记的持续时间(以秒为单位)。
comment
返回类型:字符串。
标记对话框中的注释内容字段。
chapter
返回类型:字符串。
标记对话框中的章节内容字段。
url
返回类型:字符串。
标记对话框中的 URL 内容字段。
frameTarget
返回类型:字符串。
标记对话框中的帧目标内容字段。
eventCuePoint
返回类型:布尔值。
标记对话框中的提示点类型设置。对于事件为 True;对于导航为 False。
cuePointName
返回类型:字符串。
标记对话框中的提示点名称内容字段。
parameters
返回类型:字符串值的关联数组。
标记对话框中的参数名称和参数值内容字段。
另外,标记点还有index属性
需要注意的是,index是标记点索引号,表示的是标记点在时间线上的顺序。在时间线上的第一个标记点,其索引index为1,顺序第二的标记点index为2,以此类推。
容易混淆的是,在合成标记点上显示的数字是其注释(comment)也是“name”。
也就是说,这里用thisComp.marker.key(1).time访问到的是时间线上第一个标记点的时间值,无路其注释显示的是多少。
@ marker.key(name)
返回类型:MarkerKey。
参数类型:name 是一个字符串。
返回具有指定名称的图层标记的 MarkerKey 对象。name 值是标记对话框的注释字段中键入的标记名称,例如,marker.key("ch1")。如果图层上的多个标记具有相同名称,则此方法会返回时间(图层时间)最早的标记。
标记密钥的值是字符串,不是数值。
此属性表达式可将两个由名称标识的两个标记间属性从 0 到 100 渐变:
m1 = marker.key("Start").time; m2 = marker.key("End").time; linear(time, m1, m2, 0, 100);
@ marker.nearestKey(t)
返回类型:MarkerKey。
参数类型:t 是数值。
返回时间最接近 t 的图层标记。例如,以下表达式返回图层上最接近 1 秒时间的标记的时间:
marker.nearestKey(1).time
以下表达式返回图层上最接近当前时间的标记的时间:
marker.nearestKey(time).time
简单的例子:
thisLayer.marker.nearestKey(time).time
这个表达式返回的值是,离播放时间最近的标记点所在的时间的值。
thisLayer.marker.key(1).comment
这个表达式访问的是图层上第一个标记点(inde = 1 的标记点)的注释(comment)。引入一个变量,可以写作:
n = thisLayer.marker.nearestKey(time).index; thisLayer.marker.key(n).comment
来看个例子:
给图层打上图层标记,给Rotation添加表达式:
angle = 90; //旋转变动角度 s = 1; //几秒内完成变化 m = thisLayer.marker.nearestKey(time).time; linear(time, m, m + s, value, value + angle)
这个表达式的作用是,让图层在标记点的位置开始,在1秒内旋转90度。可以随意移动标记点位置,方便调试。
也可以用thisComp.marker.nearestKey(time).time调用图层打标记点。
另外一个不实用但能帮助理解的例子:
给图层打一个标记点,并注释为“start”,给scale添加表达式:
n = thisLayer.marker.nearestKey(time).index; add = 50; if(thisLayer.marker.key(n).comment == "start" && thisLayer.marker.key(n).time > time){ transform.scale = value; }else{ transform.scale = value + [add,add]; }
这个表达式会在播放到标记点时候,将图层放大50% 。
@ marker.key(index)
返回类型:MarkerKey。
参数类型:index 是数值。
返回具有指定索引的图层标记的 MarkerKey 对象。
@ marker.numKeys
返回类型:数值。
返回图层上的标记的总数。
你好,我想请教一个问题。合成里有一个三维层,一个摄影机。我想写一个表达式能计算这个图层和摄影机所在平面的距离。并不是图层位置到摄影机位置的距离,而是图层位置,到摄影机所在平面的距离。也就是,由图层位置到摄影机XY轴形成的面之间的距离,一个点到一个面形成的垂直距离。有办法可以用表达式计算出来么?很久之前就想写,但自己表达式方面的知识不太够,一直也没解决。不知道方不方便和大佬交流一下
Good!