在 After Effects 中,对象是一种特殊的数据结构,可以理解为一组属性和方法的集合。
通过对象,可以有效地组织数据、调用方法,从而控制动画或实现特定的功能。
1、Ae 对象模型
After Effects 提供了一个清晰的对象组织结构,这个结构称为 DOM(Document Object Model,文档对象模型)。通过该模型,我们可以明确表达式中对象之间的关系及其访问路径。
“合成”对象,可包含所有图层(作为子对象),以及与合成相关的各种属性和方法。
“图层”对象,代表表达式所引用的图层。图层对象通常又包含了多个子对象,如,变换、效果、蒙版和时间重映射等。
其中,图层的“变换”子对象中包含了位置、缩放、旋转和不透明度等基本属性。
图层的“效果”子对象代表应用到图层的所有效果。每个效果对象又可包含多个属性。
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 语法构建自定义对象。通过自定义对象可在多个地方访问相同的值或方法。
请参阅:
“点赞有美意,赞赏是鼓励”