[AE 表达式]函数复用技巧

声明:我写的【AE 表达式】文章都是原创,包括文字和图片请不要以任何形式进行转载。


在 After Effects 中,表达式复用是比较麻烦的,因为表达式的作用域是当前属性,因此无法在其它位置引用,After Effects 用户指南中关于“保存和重用表达式”是需要复制然后粘贴到要使用的位置,当然,其中也提到“可以使用正常的 JavaScript 函数语法在表达式中定义自己的函数”,但是这样定义以后还是需要复制粘贴,依然只能在当前属性中复用。

helpx.adobe.com/cn/afte

要复用函数,就应该像网站前端引用 js 文件一样,所有网页共用一个 JavaScript 文件,当你修改函数的时候,所有引用自然生效。在 AE 中也是可以这样做的!

我们先来看看在表达式中使用自定义函数:

v2-d47179cb475da7fb76b6b191084d8f25_b.jpg
自定义函数

在源文本上自定义函数,如果不引用的话,会作为字符串输出。

v2-02df569aaa807ffd2a185a94376710bf_b.jpg
未运行函数

运行以后才可以输出值。

v2-f6e572efca3bf88d3df007a3b786e28e_b.jpg
运行函数以后

下面我们的任务就是要复用 hello() 这个函数。

首先,用记事本把函数代码粘贴进去;

// 自定义函数实例
function hello(){
	return "Hi there!"
}

v2-85142fe553cff7b5e045b3b7dcdc675f_b.jpg
贴个代码到记事本

文本文档 .txt 文件可以直接导入到 AE 中,但是在引用时只能作为文本引用,如果要让函数运行,则需要使用 eval() 方法运行代码。

v2-380f1a6bfa00edfe4845502ff35bf756_b.jpg
导入文本文件

v2-46a96002078c3554a2f7e341834252ac_b.jpg
引用文本文件

v2-e1895bcbfcd9ce9e52c3a2318d889f51_b.jpg
访问源文本属性 .sourceText

v2-ca30803c38ca2dca2935f8c2aea0e0fb_b.jpg
没有调用 eval() 方法

v2-379e6d97252ec572785f83e2ca345a22_b.jpg
调用 eval() 方法
eval(footage("myFunctions.jsx").sourceText);
hello()

还可以将 .txt 文件扩展名修改为 .jsx,这是 Adobe 专门的脚本文件类型,如果配合 IDE 来编写可以更加方便一些。

当然,也可以在 jsx 文件中写更多的函数然后调用。

v2-36c725fae9739a04af0a27c50ae3a23a_b.jpg
更多函数实例

以对象方式来复用函数可以使用 .sourceData 属性调用,内容可以直接作为代码运行,这样可以省去 eval() 方法,并且可以在类中定义非函数属性。

v2-56d9866e6fa99b99d2ff60affdfaf42c_b.jpg
没有定义名称的类

没有定义类名的需要在引用时定义类名,如果定义了类名,可以直接引用类名。

v2-29e386e08906c3b897c3970608b2bc46_b.jpg
引用 myClass 中的函数

v2-3eb9c5848d06a0ae4eae8d8708b672d0_b.jpg
定义类名为 myClass
// 对象实例
// 定义类名的对象
myClass = {
	foo:"foo", // 属性
	bar:function bar(){
		return "bar"
	}, // bar()
	hello:function (){
		return "Hi there!"
	} // hello()
}

v2-70c12f278c9ac76f95d4fd229678865c_b.png
直接使用类名
// 定义类名以后可以直接引用
footage("myClass.jsx").sourceData
myClass.foo

v2-f4cb2508678cf472c1040a8840151f68_b.jpg
引用类属性

类名建议在 jsx 文件里定义,因为引用时不容易出错,而且在引用时还可以覆盖定义。

多数情况,我更喜欢使用对象定义的方式,毕竟 eval() 在 JavaScript 中也不是值得推荐的方法。

eval()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值