Ae 表达式语法基础:内置对象及引用

在 After Effects 中,对象是一种特殊的数据结构,可以理解为一组属性和方法的集合。

通过对象,可以有效地组织数据、调用方法,从而控制动画或实现特定的功能。

1、Ae 对象模型

After Effects 提供了一个清晰的对象组织结构,这个结构称为 DOM(Document Object Model,文档对象模型)。通过该模型,我们可以明确表达式中对象之间的关系及其访问路径。

6640b4eba83ff0718ddaf9d04a95689a.png

“合成”对象,可包含所有图层(作为子对象),以及与合成相关的各种属性和方法。

“图层”对象,代表表达式所引用的图层。图层对象通常又包含了多个子对象,如,变换、效果、蒙版和时间重映射等。

其中,图层的“变换”子对象中包含了位置、缩放、旋转和不透明度等基本属性。

ef7d65c2b3637984773776b05825d3dd.png

图层的“效果”子对象代表应用到图层的所有效果。每个效果对象又可包含多个属性。

c45deb77fecdd63516b4d19db30741bd.png

2、对象的引用

我们可以使用 thisComp、thisLayer 等全局属性来引用当前合成和当前图层。

点表示法(.)是访问子对象以及其属性或方法的常见方式。

(1)引用合成对象

// 引用当前合成thisComp; 
//引用其他合成comp("合成 1");

(2)引用图层及其子对象

// 引用当前图层thisLayer;

还可以通过索引法或名称法来引用图层对象。

thisComp.layer(1);  // 通过索引引用合成中编号为 1 的图层
thisComp.layer("mediaTEA");  // 通过名称引用名为“mediaTEA”的图层

图层中的效果子对象、蒙版子对象等同样可使用索引法或名称法来引用。

// 引用效果对象thisLayer.effect(1);  // 通过索引引用当前图层中的第一个效果thisLayer.effect("高斯模糊");  // 通过名称引用“高斯模糊”效果effect("高斯模糊"); // 省略 thisLayer,引用当前图层中的“高斯模糊”效果。
//引用蒙版对象thisLayer.mask(1);  // 通过索引引用当前图层中的第一个蒙版thisLayer.mask("蒙版 1");  // 通过名称引用名为“蒙版 1”的蒙版mask("蒙版 1"); // 省略 thisLayer,引用当前图层中的“蒙版 1”。

(3)将对象赋值给变量

可以将引用的对象赋值给变量,以便在表达式中重复使用,增强代码的可读性和效率。

// 将合成对象赋值给变量var myComp = thisComp;myComp.duration;  // 访问合成的持续时间
// 将图层对象赋值给变量var bgLayer = thisComp.layer("mediaTEA");bgLayer.index;  // 访问该图层的索引
//将效果对象赋值给变量var blurEffect = thisLayer.effect("高斯模糊");blurEffect("模糊度");  // 访问模糊度属性

3、访问对象的属性和方法

在 After Effects 表达式中,对象的“属性” Properties表示其状态或特性,例如,合成的宽度、图层的位置、效果的模糊度等。“方法” Methods则用于执行计算或操作,例如,时间换算、坐标转换、图层颜色采样等。

(1)访问合成的属性

//访问合成的属性thisComp.width;    // 获取当前合成的宽度width;  // 可省略 thisComp,仍然访问合成的宽度

(2)访问图层的属性和方法

//访问图层的属性thisLayer.transform.position;   // 获取图层的位置transform.position;   // 如果在图层中的同级子对象引用时,可省略 thisLayerthis.position; // 可以用 this 来代表属性所在的对象
//在属性内访问时,可省略其所在对象,比如 transform 。position[0];  value[0];    // 还可直接使用 value 来代表当前的属性值 

//调用图层的方法var worldPos = thisLayer.toWorld([0, 0, 0]);  // 将局部坐标转换为世界坐标var compPos = thisLayer.toComp([100, 50]);  // 将图层坐标转换为合成坐标

(3)访问效果或蒙版的属性

//访问效果的属性thisLayer.effect("高斯模糊")("模糊度");  // 访问模糊度effect("高斯模糊")("模糊度"); // 如果访问当前图层中效果时,可省略 thisLayer
//访问蒙版的属性var maskPath = thisLayer.mask(1).maskPath;  // 获取第一个蒙版的路径var maskOpacity = thisLayer.mask("Mask 1").maskOpacity;  // 获取蒙版不透明度

4、访问全局属性和方法

全局对象、属性和方法表示它们可以在任何表达式中直接访问。

(1)全局属性

time;  // 直接访问当前合成时间
colorDepth;  // 返回合成的颜色深度

(2)全局方法

var frameTime = framesToTime(30);  // 计算 30 帧对应的时间(秒)
var frameIndex = timeToFrames(time);  // 计算当前时间对应的帧数

Math 对象是一种全局对象,它提供了大量的数学方法。

var angle = Math.sin(time * Math.PI);  // 计算正弦值
var roundedValue = Math.round(5.67);  // 取整(结果:6)

随机类的方法也是一种全局方法。

seedRandom(1, true);  // 设定随机数种子,确保结果可重复var randValue = random(0, 100);  // 生成 0 到 100 之间的随机数

还有一些时间控制类的全局方法。

posterizeTime(1);  // 可使得每秒更新一次属性值

5、其它共享数据的访问方式

(1)使用“表达式控制”

使用“表达式控制”效果组中的效果,可让合成中的对象访问共享的同一数据。

(2)使用“标记”

首先,在合成标记或图层标记的“注释”字段中存储 JSON 格式的数据。如:

{"position":[960,540],"scale":[100,100]}

然后,在目标图层的相关属性表达式中解析标记数据。

// 获取控制层的第一个标记m = thisComp.layer("mediaTEA").marker.key(1).comment;
// 解析 JSON 数据data = JSON.parse(m);
// 访问 position 数据data.position;

(3)自定义对象

在 After Effects 中,除了有大量的内置对象,还可以使用 JavaScript 语法构建自定义对象。通过自定义对象可在多个地方访问相同的值或方法。

请参阅:

Ae 表达式语法基础:自定义对象

db85c26a3b9ef0ed76a1c75a6529a686.jpeg

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值