Ae 表达式语言引用:Property

B站影视 2025-01-30 03:01 2

摘要:Property(属性及方法)组中的方法和属性,可用于查看或操作属性的关键帧、取值、时间采样、循环与平滑等方面的信息。通过这些方法,可以实现复杂的动画逻辑和自定义行为,例如通过 loop* 系列方法重复关键帧动画,通过 wiggle 或 smooth 制作随机

Property(属性及方法)组中的方法和属性,可用于查看或操作属性的关键帧、取值、时间采样、循环与平滑等方面的信息。通过这些方法,可以实现复杂的动画逻辑和自定义行为,例如通过 loop* 系列方法重复关键帧动画,通过 wiggle 或 smooth 制作随机或平滑的动态效果,通过 valueAtTime 和 velocityAtTime 等进行更精确的时间操作,等等。

value

获取属性在当前时间的值。

返回值 :Number、Array 或 String,具体取决于属性类型。例如,位置属性通常返回二维或三维数组,旋转属性返回数值,不透明度返回数值,文本属性可能返回字符串。

应用:

// 示例 1:获取当前属性并加以改动value + 10;//示例 2:使用另一个属性进行混合value * thisComp.layer("Control").effect("滑块控制")("滑块");

valueAtTime(t)

获取属性在指定时间点的值。

参数 :

t :Number,要采样的时间,以秒为单位。

返回值 :与 value 相同类型,可以是 Number、Array 或 String,具体取决于属性类型。

应用:

// 示例 1:假设在 0、1、2、3 秒处设置了四个关键帧,随机在这四个时间点的关键帧中选择属性值。randomValue = Math.floor(Math.random * 4);ransform.rotation.valueAtTime(randomValue);// 示例 2:让属性等于1秒前的值valueAtTime(time - 1);// 示例 3:为形状图层设置“旋转”关键帧动画并添加表达式,。之后,复制图层多次。valueAtTime(time - index/10)

velocity

获取属性在当前时间的“速度”或“速率”值。

对于时域属性(如透明度),它表示数值随时间的变化速率。

对于空间属性(如位置),它表示切线向量(X、Y、Z 的变化速率)。

返回值 :Number 或 Array 。如果是数值属性(如不透明度),返回一个数值;如果是空间属性(如位置),返回一个与其维度对应的数组。结果与属性的维度相同,且根据运动方向会出现负值的速度。

应用:

// 示例 1:返回在 x 轴上的运动速度thisComp.layer("mediaTEA").transform.position.velocity[0]// 示例 2:可以根据当前属性的速度进一步调整动画,从而实现惯性或动力学效果。var v = velocity;value + v; // 根据速度来改变属性,比如给位置增加动力学效果

velocityAtTime(t)

获取属性在指定时间点的“速度”或“速率”值。

参数 :

t :Number,要采样的时间,以秒为单位。

返回值 :与 velocity 返回相同类型,可为 Number 或 Array,取决于属性类型。

应用:

// 示例 1:取比当前时间早 0.1 秒处的速度,用于延迟动画velocityAtTime(time - 0.1);// 示例 2:检测一段时间前属性的变化速率prevVel = velocityAtTime(time - 0.5);// 如果在 0.5 秒前速度较大,当前做某些处理preVel

speed

获取属性在当前时间的“速度标量”,即一个正数值表示属性变化的速率。仅适用于空间属性(如位置) 。

返回值 :Number,表示属性在当前时间的变化速率(标量),不含方向信息。

应用:

// 示例 1:让缩放属性随着位置属性的速度而变化,速度越快,变得越小。var s = position.speed/20;value - [s,s]// 示例 2:在速度较小时添加缓动if (speed

speedAtTime(t)

获取属性在指定时间点的速度标量(正数),仅适用于空间属性(如位置)。

参数 :

t :Number,要采样的时间,以秒为单位。

返回值:Number,表示指定时间点的属性变化速率。

应用:

// 示例 1:统计过去某时刻的运动速度var spd = speedAtTime(time - 0.2);// 根据过去的速度决定当前操作spd > 10 ? 100 : 50;// 示例 2:将属性按照过去速度的2倍进行延后动画效果,适用于惯性或拖尾动画speedAtTime(time - 0.1) * 2;

wiggle(freq, amp, octaves=1, amp_mult=0.5, t=time)

让属性值随时间按指定的频率和幅度进行随机变化。

参数 :

freq :Number,频率,即,每秒抖动的次数。

amp :Number,振幅,即,每次抖动的最大偏移量。

基于原属性值进行正、负摆动。比如,旋转属性值为 100,当 amp 设为 50 时,旋转属性值将在 50 ~ 150 之间随机摆动。

octaves :可选,Number,叠加噪声的层数,默认值 1。

用于控制抖动的复杂程度。每增加一个 octave,都会在 freq 上叠加更高频率的细节噪声,使得 wiggle 看起来更不规则。

amp_mult :可选,Number,叠加噪声衰减,默认值 0.5。

指的是每增加一层 octave,振幅递减的倍数。范围在 0 ~ 1 之间。接近 1 时,细节越多,变化更突兀。接近 0 时则细节越少,抖动更平滑。

t :可选,Number,计算起点的时间,默认为 time,表示随时间变化。

如果希望输出成为在不同时间采样的属性值的摆动,请使用此参数。比如设为 5 时,将仅使用第 5 秒的属性值来摆动。

返回值: 与属性的类型一致,可为 Number 或 Array。

应用:

//示例 1:每秒5次抖动,抖动幅度约20单位,可用于位置等二维或三维属性 wiggle(5, 20); //示例 2:按相同值摆动两个维度v = wiggle(5, 10); [v[0], v[0]] //示例 3:只在 Y 轴上摇摆w = wiggle(3,50); [value[0],w[1]]; //示例 4:每秒产生约 5 次摆动,平均大小约 20 像素。除了主要摆动之外,其他两个级别的详细摆动发生的频率为每秒 10 次和 20 次摆动,各自的大小为 5 和 10 像素position.wiggle(5, 20, 3, .5)

temporalWiggle(freq, amp, octaves=1, amp_mult=0.5, t=time)

temporalWiggle 并非对属性的值进行抖动,而是对时间采样进行抖动。也就是说,属性本身必须已经动画化,否则无意义。

参数 :

freq :频率,即,每秒抖动的次数。

amp :振幅,表示时间范围。

octaves :附加噪声层数。

amp_mult :每增加一层噪声,振幅的递减倍数。

t :可选,时间起点,默认当前时间 time。

返回值 : 与属性类型相同,可为 Number 或 Array 。 因为它采样了“随机化时间”的属性值。

应用:

//示例 1:只更改采样时间而不是值。scale.temporalWiggle(5, .2)//示例 2:在关键帧基础上随机化时间采样scale.temporalWiggle(5, .2);// 示例 3:让透明度在关键帧时间周围随机波动opacity.temporalWiggle(2, 0.5);

smooth(width=.2, samples=5, t=time)

平滑属性在一定时间范围内的值,过滤掉短时尖峰。

参数 :

width :Number,以秒为单位的时间范围,默认为 0.2。

samples :Number,取样次数,默认为 5。为更大的平滑度可使用更大的值,但性能会下降。

t :Number,可选,表示时间起点,默认当前时间 time。

返回值 : 与属性和类型一致,返回平滑后的值,可能是 Number 或 Array 。

应用:

//示例 1:在 0.1 秒的时间窗口内,取 5 次样本,对位置进行平均过滤,减少抖动position.smooth(.1, 5)//示例 2:对音频振幅进行平滑,防止过于尖锐的音频峰值影响动画var amp = thisComp.layer("音频振幅").effect("两个通道")("滑块");amp.smooth(0.2, 5);

loopIn(type="cycle", numKeyframes=0)

用于设置关键帧动画的入点循环。即,从图层的入点开始重复播放指定的动画段,直到第一个关键帧。

指定动画段的界定方法是:从第一个关键帧开始数,比如 loopIn("cycle", 1) 表示从第 1 个关键帧到第 2( numKeyframes + 1 )个关键帧之间为要重复播放的指定动画段。

参数 :

type :String,可选,指定循环方法,默认值为"cycle"。

-- "cycle" : 重复播放指定动画段,类似于 4321 4321 的循环播放。

-- "pingpong" :往返 播放指定动画段,类似于 1234 4321 的循环播放。

-- "offset" :将第一个关键帧与 第二个关键帧的变化(偏移)值重复叠加到每次循环,从入点开始并从最后一次循环开始播放,类似于 (1+1.3n)(1+1.2n)(1+1.1n)(1)的递减循环。

-- "contiune" :此方法下,无 numKeyframes 参数,动画会按照第一个动画段的速度和方向并以其变化量(前面两个关键帧)持续循环,从入点开始并从最后一次循环开始播放,类似于 (1+1.3)(1+1.2)(1+1.1)(1)。

numKeyframes :Number,可选,指定要参与循环的动画段数,0(默认)表示从第 1 个关键帧到最后一个关键帧之间的动画段。1 表示从第 1 个关键帧到第 2 个关键帧之间的 1 段动画,2 表示从第 1 个关键帧到第 3 个关键帧之间的 2 段动画。

返回值:与属性类型一致,返回基于指定循环规则的属性值。

应用:

为确保入点循环动画结束后与第一个关键帧无缝衔接,loopIn 会根据参数的设置计算出入点时属性的值。

//示例 1:以下写法,意义一致。不断重复从第一个关键帧到最后一个关键帧的动画loopIn(type="cycle", numKeyframes=0);loopIn(type="cycle");loopIn("cycle");loopIn;//示例 2:从图层入点开始,循环播放第1个关键键到第2个关键帧之间动画段落loopIn("cycle", 1);//示例 3:从图层入点开始,往返播放第1个关键键到第3个关键帧之间动画段落loopIn("pingpong",2);

loopOut(type="cycle", numKeyframes=0)

用于设置关键帧动画的出点循环。即,从最后一个关键帧开始重复播放指定动画段,直到图层出点。

指定动画段的界定方法是:从最后一个关键帧往回数,比如 loopOut("cycle", 1) 表示从倒数第 2 (numKeyframes + 1)个关键帧到最后一个关键帧之间为要重复播放的指定动画段。

参数:

type :指定循环方法,默认值为"cycle"。

-- "cycle" :重复播放指定动画段,类似于 1234 1234 的循环。

-- "pingpong" :往返播放指定动画段,类似于 4321234 的来回循环。

-- "contiune" :此方法下,无 numKeyframes 参数。以最后一个动画段的速度和方向并以其变化量(最后两个关键帧)持续循环。即,类似于 1234 (4+4.1)(4+4.2)(4+4.3) ... 的重复。

-- "offset" :第一次循环时会叠加从倒数第 2 个关键帧到最后一个关键帧的变化(偏移)值,第二次循环时再叠加,依次类推,循环动画遵循从倒数第 2 个关键帧到最后一个关键帧同样的速度与方向,类似于 1234(4+4.1n)(4+4.2n)(4+4.3n)...的递增循环。

numKeyframes :Number,可选,指定要参与循环的动画段数,0(默认)表示从第 1 个关键帧到最后一个关键帧之间的动画段。1 表示从倒数第 2 个关键帧到最后一个关键帧之间的 1 段动画,2 表示从倒数第 3 个关键帧到最后一个关键帧之间的 2 段动画。

返回值:与属性类型一致,返回基于指定循环规则的属性值。

应用:

// 示例 1:循环倒数第2个关键帧到最后一个关键帧之间的动画段落loopOut("cycle", 1);// 示例 2:往返循环所有关键帧动画段loopOut("pingpong");// 示例 3:按最后一个动画段的方向和速度持续循环loopOut("continue")// 示例 3:按最后两个动画段递增循环loopOut("offset",2)

loopInDuration(type="cycle", duration=0)

用于设置关键帧动画的入点循环。即,从图层的入点开始重复播放指定动画段,直到第一个关键帧。

指定动画段的界定方法是:从第1个关键帧开始计算,比如 loopInDuration("cycle",1),表示从第 1 个关键帧到其后的 1 秒处的范围作为要重复播放的指定动画段。

参数:

type :String,选项同 loopIn 方法。

duration :Number,要循环的时间长度,以秒为单位。默认值为 0,意味着要重复的指定动画段是,从第 1 个关键帧到图层出点。为 2 时,表示第 1 个关键帧到它之后两秒的范围。

返回值:与属性类型一致,返回基于指定循环规则的属性值。

应用:

为确保入点循环动画结束后与第一个关键帧无缝衔接,loopInDuration 会根据参数的设置计算出入点时属性的值。

// 示例 1:重复播放从第一个关键帧开始的 1 秒范围内的动画段loopInDuration("cycle", 1);// 示例 2:将第一个关键帧开始的 2 秒范围内的动画段落进行 “乒乓” 循环loopInDuration("pingpong", 2);

loopOutDuration(type, duration)

用于设置关键帧动画的出点循环。即,从最后一个关键帧开始重复播放指定动画段,直到图层出点。

指定动画段的界定方法是:从最后一个关键帧往回计时,比如 loopOutDuration("cycle", 2) 表示从最后一个关键帧开始倒数 2 秒处到最后一个关键帧之间作为要重复播放的指定动画段。

参数:

type :String,选项同 loopOut 方法。

duration :Number,要循环的时间长度,以秒为单位。默认值为 0,意味着要重复的指定动画段是,从图层入点到最后一个关键帧。为 1 时,表示从最后一个关键帧倒数 1 秒处到最后一个关键帧之间的范围。

返回值:与属性类型一致,返回基于指定循环规则的属性值。

应用:

// 示例 1:反复循环最后一个关键帧往前 1 秒区间的动画段loopOutDuration("cycle", 1);// 示例 2:将最后一个关键帧往前 2 秒区间的动画段按递增方式进行循环loopOutDuration("offset", 2);

key(index)

获取属性在某个关键帧(或标记)的信息对象。

参数:

index :Number,指定关键帧的序号(从 1 开始)。

返回值:Object。对于标记(Marker)属性,会返回 MarkerKey 对象;对于数值属性,会返回 Key 对象。

应用:

//示例 1:返回位置属性的第一个关键帧的时间transform.position.key(1).time;//示例 2:返回位置属性的第一个关键帧的值thisLayer.position.key(1).value//示例 3:图层的第2个标记的时间thisLayer.marker.key(2).time

key(markerName)

仅适用于标记属性,根据标记名来获取对应的 MarkerKey 对象。

参数:

markerName :String,标记的名称。其实就是标记的注释内容。

返回值:返回一个 MarkerKey 对象,包含此标记的信息(如时间、注释等)。

应用:

//示例:获取名为 “图层标记1” 的时间thisLayer.marker.key("图层标记1").time

nearestKey(t)

获取在指定时间点 t 附近的关键帧(或标记)对象。即找到最接近 t 时刻的关键帧或标记。

参数:

t :Number,指定时间点,以秒为单位。

返回值:对于标记(Marker)属性,会返回 MarkerKey 对象;对于数值属性,会返回 Key 对象。

应用:

// 示例 1:获得最接近1秒时的关键帧的值thisLayer.transform.position.nearestKey(1).value// 示例 2:持续获得最接近的标记的注释thisLayer.marker.nearestKey(time).comment// 示例 3:检测是否接近某个关键帧,并作相应处理var result = value; // 默认使用当前属性值if (thisProperty.numKeys > 0) {var nKey = thisProperty.nearestKey(time); // 获取最近的关键帧if (Math.abs(nKey.time - time)

numKeys

返回某个属性的关键帧总数,或者对于标记属性则返回标记的总数。

返回值:Number,表示关键帧或标记数量。

应用:

// 示例 1:返回当前属性的关键帧数目x = thisProperty.numKeys;// 示例 2:循环读取所有关键帧的时间并把它们拼接为字符串var n = transform.position.numKeys;var times = "";for (var i = 1; i 0) {// 有关键帧时的处理}else {// 没有关键帧时的处理}

name

获取当前属性或属性组的名称字符串。

返回值:String,当前属性或属性组的名称。

应用:

// 示例 1:输出当前属性的名称thisProperty.name;// 示例 2:根据属性名称来执行不同的表达式逻辑if(transform.rotation.name.trim === "旋转"){// 如果名称是 "旋转",执行某些操作}

检查属性是否在当前上下文中处于激活状态。

返回值:Boolean。true 表示激活,false 表示未激活。

应用:

// 示例:thisProperty.active

enabled

检查属性是否启用。

返回值:Boolean。true 表示启用,false 表示禁用。

应用:

// 示例:thisComp.layer("形状图层 1").effect("高斯模糊")("重复边缘像素").enabled

propertyGroup(countUp=1)

获取相对于当前属性所在的父级(或更高层级)属性组对象。适用于在表达式中进行层级引用时使用。

参数:

countUp :Number,表示向上查找多少级的属性组。默认值为 1,表示向上查找一层。为 2 时返回其上一级的属性组(上二级对象),以此类推。

返回值:返回一个 Group 对象,表示属性所处的父级属性组。

应用:

//示例 1:propertyGroup 的 numProperties 方法返回属性组中属性的数目。var pGroup = thisProperty.propertyGroup(1);pGroup.numProperties;//示例 2:可用于在表达式中相对地引用到父级或更高层级的属性,适合在复杂图层层级里。var pGroup = thisProperty.propertyGroup(2);pGroup.transform.rotation

propertyIndex

返回当前属性在其父属性组中的索引值(以 1 为开始)。

返回值:Number,表示当前属性在父属性组中的位置索引。

应用:

//示例 1:旋转属性所在上级对象依次为:变换组(1),椭圆 1 (2),内容(3) r = thisComp.layer("形状图层 1").content("椭圆 1").transform.rotationr.propertyGroup(2).propertyIndex; //椭圆 1 在“内容” 里的序号 //提示 :在图层对象(最高级别)里面的“内容” 序号总为 2,因为它前面还有一个隐藏的 Marker 属性组。//示例 2:输出当前属性在同一级属性列表中的位置var idx = thisComp.layer("形状图层 1").content("椭圆 1").transform.rotation.propertyIndex;var gName =thisComp.layer("形状图层 1").content("椭圆 1").transform.rotation.propertyGroup(1).name;"此属性是 No. " + idx + " 在" + gName + "属性组中";

“点赞行美意,赞赏是鼓励”

来源:群星满天空

相关推荐