header_v0.7.31

AE表达式江湖文档

1年前发布

原创文章 / 影视 / 教程
郑越升 原创,如需商业用途或转载请与郑越升联系,谢谢配合。

读懂AE表达式,,会写AE表达式。

·前言

·表达式基础

·表达式的规则

·掌握常用的表达式等于掌握90%

·其他表达式的学习方法

·怎么优雅地鞭挞表达式

·附带:AE表达式学习资源推荐


一、前言

    一直以来,大多数人都不想去碰AE的表达式,觉得和编程挂钩的东西都很难。于是我尝试着去思考怎么简单地做AE表达式的教程,让大部分人能接受。 
于是,这篇非官方的来自江湖的AE表达式文档就出炉了。

    江湖就有江湖的规矩。 
    不拘小节不刻板,不可能像官方文档一样每个函数都单独拿出来讲,官方文档是让人们当做字典查找的,我们只讲有用的,讲少一点,讲简单一点。

    本文的目的不在于全面,在于力争各位读完之后,看得懂AE表达式,会写AE表达式!


二、表达式基础

①、如何添加表达式 
    再深厚的功夫也是从扎马步开始的。如何添加表达式呢?两个动作。 
    ①按住[Alt键],②点击你要添加表达式的属性前面的[秒表]。 
    这个时候就会出现一个编辑框,把表达式写进去就可以啦。

    示例:用表达式让[ball]的位置固定在[200, 200]处。 

fd0f56f5482d32f875a94485d584.jpg


②、表达式开关 
    这个开关是[开启/关闭]表达式,可以令你在不清除表达式框的情况下,禁用表达式。

    示例:表达式的开启和禁用 


c93856f5484e6ac72579486e5c5e.jpg


③、表达式拾取器 
    它在民间有多个名字,飘忽不定,有人说是拾取器,有人说是关联器,有人说是橡皮筋。 
    打个比方,你在写一篇叫做《我的同学》的作文,你的同学名字叫做沃尔塔·萨斯皮诺斯·阿卡贝斯基,你记不住,于是你用手指一指你的同学,他的名字就自动出现在你写的文章里面,多方便呀,多伟大的手指呀。表达式拾取器就是这只神奇的手指。

    示例:用表达式让[ball]图层的位置位于[anotherBall]的下面50px处 


df1956f5486b32f875a944b9d265.jpg


④、函数菜单 
    AE有很多已经内置的函数给你用,你并不需要记住它们每个的名字和参数,只需要记住有这么一个函数存在就可以,需要用的时候可以在这个菜单里面搜索你想要的函数。 


da6356f548836ac7257948bc0f29.jpg


三、表达式的规则


    AE表达式的规则,等同于我们平日说话的时候主谓宾等语法规定,我们需要遵守,AE和你才能正常愉快地交流啊。


规则一:它要啥你就给它啥 
    无论你表达式写得多么长多复杂,前面一大堆,都是为了计算出最后那个AE所要求的格式的东西。

    [位置]:我要的是一个格式为[x, y]的东西,我好知道我在哪个地方。 
    [不透明度]:我只要一个数值就可以了,比如0,比如50,比如100。 
    [填充颜色]:我需要一个格式为[r, g, b, alpha]的东西,我好知道我是个啥颜色。

    【示例】: 


b73256f548a232f875a944c9d4a2.jpg


规则二:类型 
    在AE表达式中,变量a常见的类型有 
    ①、数值。例如数字1、1.5、-10。
    ②、字符串。用引号包括起来,例如一个字符串”哈喽你好呀”、”我在写文档ing” 。
    ③、布尔值。判断对错的布尔类型 true 和 false 。
    ④、数组。由许多元素组成的一个组。 


246656f548d06ac725794846f17a.jpg


规则三:基本的计算 
    加减乘除就不用说了,在这里提一个常用的[取余数]的符号——%。 
    比如:a = 100 % 3; 
    那么a的值就是1。

    【示例】: 


9d4256f548e732f875a944efadd0.jpg


    注:[time] 是AE提供的,表示当前的时间。例如1s时,time = 1;2.5s时,time = 2.5。我们经常利用[time]的值跟随时间变化这个特性来制作动画。


规则四:变量

f0e556f548f76ac7257948a952d7.jpg

    不要觉得[变量]这个词很陌生可怕,其实,初中开始我们的数学引入的字母,可以说就是[变量],它的作用就是来存储数值的。

    【示例】: 


c8f856f5491832f875a944743f15.jpg


    注:[time] 是AE提供的,表示当前的时间。最后一个示例中的”time % 1”,表示当前时间对1取余数。例如time = 1.5s处,time % 1 = 0.5。因此,(time % 1) 随着时间在0~1之间不断变化。


规则五:语句 
    表达式是由一行一行的语句构成的,每个语句以一个分号结尾,当然AE表达式允许你忽略分号,不过在每个语句后面添加分号,是一个好的习惯。


规则六:注释 
    先看看下面两个表达式: 


029556f549376ac72579489cd50d.jpg


    上面那个可能你一开始看到,一时半会不知道它是用来做什么的。 
    但是下面那个表达式,添加了作者的注释,一目了然!

    有两种注释的方法: 
    ①、单行注释:两个斜杠 // 可以注释掉同一行后面的所有内容。 
    ②、多行注释:可以用 /* 和 */ 把要注释的内容括起来,这种方式可以注释多行内容。

    话说回来,注释可以解释代码的作用,增加可读性,同时它不会被运行,直接被AE忽略掉。简单来说,表达式是写给AE看的,注释是写给人看的

【示例】: 

38e656f5494932f875a944fc97f6.jpg


规则七:条件 
    条件语句的结构其实很简单,总结来说就是:

 


e1a556f5497032f875a944a17cfd.jpg


    注意: 
    ①、一个if后面可以跟着无数个else if,但是只能跟着一个else,且必须在最后面。 
    ②、{} 花括号后面不需要加分号。 
    ③、if 和else if后面的括号里是判断的条件,常见的判断有以下: 
    1、a == 1 (判断a的值是不是等于1,切记是两个等于号) 
    2、a >= b (判断a的值是不是大于等于b) 
    3、 !(3 > 1) (!表示取反,因为3>1是true,所以取反之后这个条件是false) 
    4、flag (判断flag是布尔值true还是false) 
    5、0 (当判断条件是0,则表示false,若是0以外的其他数字,则表示true)

    【示例】: 


775156f549836ac72579483b59c2.jpg


规则八:循环 
    个人感觉:循环在AE表达式里面的使用其实还挺少见的(所以循环的例子好难想呀) 。
    循环有三种形式,你可以根据具体情况选择任意一种。 


a5e156f549926ac7257948615677.jpg


    举个例子我们看看怎么使用。 


e7b156f549a332f875a944ca3b9e.jpg

    注:在循环块里面添加”break;“,表示跳出(打破)这个循环,不管循环条件满不满足,都跳出循环。 
    和 “break;” 类似的还有一个 “continue;” ,它表示结束本次循环,进行下次循环,而不是跳出(打破)循环。


规则九:函数 
    ①、内置函数: 
    还记得那个函数菜单吗?在里面我们可以看到很多AE提供给我们使用的函数。 
    例如: 
    a、wiggle(freq, amp);  // [摆动]函数,freg是频率,amp是幅度 
    b、random(min, max);  // [随机]函数,在min和max值之间取一个随机值 
    (更多内置常用的函数将在第四节讲解) 


7fc956f549be32f875a944068f64.jpg


    ②、自定义函数: 
    个人感觉:在AE表达式中自定义函数还是比较少见的。 
    函数的定义格式如下: 


75ea56f549cd32f875a944039b69.jpg



    在这里我们简单地举一个例子: 


da9256f549de32f875a9448a4ced.jpg


    注:因为random()返回的是一个小数,所以我们自己写了一个getRandomInt(min, max)函数来返回一个随机的整数


规则十:那些特殊的规则 
    ①、a = a + 1; 这个语句我们可以简写为 a++; 
    ②、同理,a = a - 1; 我们可以简写为 a--; 
    ③、条件语句还有一种写法:condition ? do somthing : or do something; 
    这是在 if 和 else 都只有一个语句的时候可以采取的简写方式。 
    举例: 2 < 3 ? a = 1 : a = 0; // a的值为1 
    一般我们写成 a = 2 < 3 ? 1 : 0; // a的值为1


注:想完整地学习语法规则可以去runoob.com或者w3school.com.cn搜javas cript的教程看。


四、掌握常用的函数等于掌握90%


    一般我在写表达式的时候,除非突发奇想想写点新奇的东西,基本90%就是使用那几个常见的函数。

一、time 
    前面提过,time随着时间线的变化,值也在变化,1秒处time=1,1.5秒处time=1.5。 
    利用随着时间变化的time值,我们可以做出随着时间变化的表达式。


932956f549fa32f875a9444c3168.jpg


二、index 
    每个图层都有自己对应的index,根据index不同,我们可以给不同图层做出不同的效果。


3a5c56f54a056ac72579481a145e.jpg


二、value 
    即[不加表达式情况下]当前该属性的值。


三、wiggle(freq, amp) 
    摆动函数,第一个参数freq指的是摆动的频率,第二个参数amp指的是摆动的幅度。


3c5c56f54a1932f875a944af4a17.jpg


四、random() 
    随机函数,通过调用random(),我们可以得到一个介于0和1之间的随机值,利用随机值,我们可以做出各种随机的效果。


623556f54a256ac725794849348e.jpg


五、valueAtTime(t) 
    这是一个常见的函数,我们可以调用这个函数得到对应时间的值。


1a7156f54a3032f875a94457dcff.jpg


六、loopOut() 
    循环函数。当我们想做一个来回运动的球的时候,我们不需要重复K帧,只需要做好一个来回的关键帧,然后添加loopOut()函数即可~


021056f54a3c6ac7257948f95141.jpg


五、其他表达式的学习方法

    其他的表达式有的时候也会用到,那我们应该怎么去学习呢? 
    ①、浏览了解:还记得我们在第一章提到的小三角形吗,在那里我们可以看看AE给我们提供了什么函数,里面有一些可能你永远都不会用到,但是了解浏览一下不会错的。
    ②、官方文档:当然在这里我们只能看到每个函数的名字,至于它 能怎么用,请查看官方文档!官方文档已经对每个函数的作用描述得很清楚了,还有举例说明,在这里没必要赘述。 
    附:官方中文文档网站: 
https://helpx.adobe.com/cn/after-effects/using/expression-language-reference.html


六、怎么优雅地鞭挞表达式


    终于写到如何优雅鞭挞表达式了,激动! 
    我们分3个Part来鞭挞!

Part 01:利用表达式控制控件,优雅控制参数 
    在AE 的效果特效中,有一个叫做[表达式控制]的子菜单。 
    我们可以利用着这些控制控件,来轻松地控制表达式的参数,实现不同的效果。


0a2756f54a5732f875a944845695.jpg


    ①、举一个例子,用[滑块控件]来控制五角星旋转的速度。最重要的是,通过这个[滑块控件],我们不仅可以直观简便调整旋转速度而不需修改表达式,还可以给五角星的旋转速度K帧,让五角星在不同时间以不同速度旋转。


406d56f54a696ac72579482c0886.jpg


    ②、再附上一个[复选框控制]的例子


a29b56f54a7732f875a9440d517b.jpg


Part 02:函数化,让表达式结构更清晰 

    在表达式中,我们可以把重复使用的代码组织成一个函数。这样,即使很长的表达式,也会条理清晰,结构明了。(不过因为表达式一般不会很长,函数化用到得也比较少)
    具体使用方法,请参考第三章的规则九小节


Part 03:优雅的编写风格 
    略。


附带:AE表达式学习资源推荐

①、官网: 
https://helpx.adobe.com/cn/after-effects/using/expression-language-reference.html 


②、Harry Frank的一套经典的AE表达式视频教程(六集) 
中文字幕自取链接:http://pan.baidu.com/s/1c9c5S6 


③、一个很棒的AE表达式文档教程 
原版:http://www.jjgifford.com/expressions/basics/index.html 
翻译版:http://andyeee.blogspot.com/2010/12/ae-expressions-1.html


199
    意见反馈
    没有新消息
    密码登录
    短信登录
    微信二维码登录

    提示文案

    提示文案

    提示失败
    提示成功