欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


如何使用Word2013中新增的开发工具
word2016怎么生成目录
word2016怎么加密
教育技术服务平台电子档上传方法
Excel 2007如何设置自动保存
Excel表格中鲜为人知的“照相机”功能
.NET Framework 安装失败的解决办法
Win10的电脑开机密码怎么关掉
adobe reader把PDF转换成word教程
qq电脑管家打不开怎么办
AE表达式新手入门免坑提示
【 来源:网络 】【 点击:3 】 【 发布时间:2017_03_03 08:59:59 】

 1.jpg

  其中用到的知识点包括操控点和表达式。操控点没什么好说,就是钉钉子嘛,但是表达式很有意思,所以我总结了几个初次接触表达式的新手可能会遇到的问题,也是我掉过的坑(往事如烟):

  一、刚使用ae表达式会遇到很多一时无法理解的“术语”

  1)对象(object):也叫物体或者物件,代表世界万物,一切皆为对象。在AE里,合成、图层、导入的素材或者路径形状等等,他们都是对象。

  2)属性:例如人的身高、体重等都是人的属性。在ae里就指对象的position、scale、rotation等等,每个属性都会有一个值。要注意的是对象的属性也是对象,所以属性也会有自己的属性~(好复杂T T),例如某合成的position属性又具有两个属性分别是x和y。

  3)方法:指对象可以做什么或者有什么功能,例如人有一个“方法”叫做“吃饭”,使用这个“方法”就可以补充能量。同样在ae里所有“合成”都有一个方法叫“layer”,可以找到自己内部的某一个图层。

  4)参数:前面说到人有一个“方法”叫“吃饭”,使用这个“方法”就可以补充能量,但是天下没有免费的午餐,要调用这个方法的前提是得有饭,这个“饭”就是参数。同样在ae里我们调用一个“方法”通常需要传递一个“参数”,比如上面提到的“layer”方法,调用时需要传递图层名,类似:

  thisComp.layer("layer_name");

  其中thisComp指当前合成,layer_name是要调用的图层的名字,也就是方法所要求的参数。不过也不是所有方法都需要参数。

  5)返回值:基本上所有“方法”运行完都会给我们一个结果,就像你吃完饭会觉得饱了或者还不够,女人分娩会返回一个男孩或者女孩或者其他情况。

  6)数组和索引:例子

  array = [a,b,c];

  这是一个名叫array的对象,因为它的值是形如 [x,y...] 的造型,所以他是一个数组,而且这个数组包含3个元素分别是a,b,c。如果我们要拿到array内部的元素a的值,就需要知道a的“索引”,现在我们可以看到a是array的第一个值,所以他的索引是0(没错索引都是从0开始的!),所以

  array_a = array[0];

  这样就将array内部元素a的值赋给了array_a对象~

  好了,还有更多其他术语什么的对新手来说应该还不需要,我们只了解上面几个应该就够了。最后来看看下面这个语句,如果能说出发生了什么那应该就没问题了:

  thisComp.layer(1).position.valueAtTime(time+2);

  对象“thisComp”调用方法“layer”,传入的参数为图层的索引:1(指合成里的第二个图层)。“layer”方法返回了图层2之后,获取图层2的属性position,然后调用position对象的valueAtTime方法,传入的参数为“time+2”。其中time是全局变量,指当前时间(我不解析全局和变量的概念了,不然没完没了,有兴趣可自行百度)。最后valueAtTime方法返回position在当前时间后4秒的值[x,y]。

  二、属性的维度问题

  像上面的例子,position 的值是一个由两个元素组成的数组,分别是x和y坐标的数值,而不透明度opacity的值只是一个数值,所以相互之间不能直接赋值,不然会报错。在ae表达式里称这种情况为维度不同,以下是各种属性的维度参考:

2.jpg

  jking的这篇文章末尾也有提到,可惜当时我还没看到这里,而且自己的感悟比较迟钝所以还是被坑了一下下。jking有提到1维属性如何赋值给2维属性,但是反过来呢?如果你已经理解前面对“数组”概念的解析那么应该已经有答案,对就是这样:

  opacity = scale[0];//2维属性赋值给1维属性 position = [opacity,opacity];//1维属性赋值给2维属性

  通过索引0可以获得数组scale的第一个元素“x”(宽度缩放值),这个值是一维的,所以可以赋值给一维的opacity属性,再将opacity属性的值分别赋值给position数组的两个元素。顺便一提,“//”号代表注释,后面的内容都不会被编译。

  三、方法的多态问题

  “多态”是什么意思呢?听名字应该能大概猜到吧,就是指某个方法在不同的调用环境下会有不同的效果。具体我们以wiggle方法为例子说一下。

  wiggle这个函数似乎经常用到,因为能产生随机抖动。关于wiggle的用法和各个参数的含义其实认真参阅官方文档应该没问题,但是我这里还是多说几句。首先通常我们只用wiggle的前两个参数:

  v = wiggle(5, 10);

  上面表示wiggle的抖动频率为5,幅度为10。那么问题来了,wiggle的返回值是一维的还是二维的?答案是要看这个表达式用在哪里。什么意思?请看例子:

  图1:

3.jpg

  图2:

4.jpg

  上面两个表达式都是对的,由于图1表达式在二维属性position中调用,所以表达式里的wiggle(3,50) 相当于position.wiggle(3,50),而当wiggle被一个二维属性调用时,他返回的结果也是一个二维的值,形如[x,y],也就是一个拥有两个元素的数组,所以可以直接赋给position。

  而图2中,wiggle是被一个一维属性调用的,所以他返回的结果也是一个一维的值,所以也可以直接赋值给一维属性opacity。

  没错这就是wiggle的多态表现~

  再看图3:

5.jpg

  可以看到那个黄色三角形表示这段表达式是错误的,因为虽然这段表达式是写在一维的opacity属性中,但是wiggle方法却是由二维的position属性调用的。所以返回值也是二维的,不能直接赋值给opacity属性。只要改成下面这样就可以了~:

  v = transform.position.wiggle(3,50)[0]; //加上“[0]”表示wiggle返回数组的第一个元素的值 v

  所以大家以后使用wiggle时一定要分清楚wiggle是由什么维度的属性调用的,不然一不小心就会犯不同纬度的属性互相赋值的错误。当然wiggle只是一个例子,其他方法也可能会有多态性,典型如valueAtTime等等(抱歉我认识的方法还比较少。。),相信大家可以举一反三。

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站