≡
导航
搜索
教程
插件
模型
模板
博客
交易
朋友
霄云AE后期学习吧
已关注 | 取消
+关注
关注:
121
帖子:
785
签到
05月05日 尚未签到
看帖
图片
精品
视频
共有回帖数
0
个
【教程】【教程】表达式心得与拾遗
取消只看楼主
收藏
回复
长街旧港00
等级:
今天准备抽点时间来讲一下表达式,百度了一下,表达式方面的教程比较少,视频教程有琳达的和frak的,不过都是国外的,有中文字幕。国内的视频教程有罡渡晨星的,不过要给钱才能看,我没有给,所以我不知道他讲得怎么样。至于那两个国外的教程,我觉得讲得不错,Frank的讲得比较深入,而琳达的讲得比较全一些,不过还是有一些许地方没有涉及到,文字方面的教程往往比较支离破碎,言此失彼,不够系统。所以我决定开一个帖子作一些抛砖引玉性质的讲解,可能会比较长,也许词不达意,难免有错误,希望吧友不吝海涵。
在正式接入正题之前,先了解一些基本的问题。
一、表达式能干什么?
答:表达式并不能帮你做出华丽的特效,但是可以让一些看起来比较麻烦的事情变得比较轻松,比如说你想做两个圆球的动画,并且保证两个圆球的大小无论如何变化,它们的面积之和始终是一个定值。或者一个球在做不规则移动的时候,它的周长刚好是它运动路程的三分之一。
二、表达式难学不?
答:在学之前,我也有这样的疑问,但学完之后,我才发现我完全多虑了。
三、表达式需要掌握哪些知识?
答:1、英语。英语好一点,你可以更明白你在做的是什么事情。
2、数学,主要是函数、几何方面的东西。它能告诉你怎样达到你所要的结果。
3、JAVA编程基础。你只需要懂一点点基础就可以,不必像程序员一样,这有助于你写出更规范的东西,减少出错的可能。
4、AE基础知识。这能够让你的表达式发挥得淋漓尽致。
下面说一些基本的问题
一、怎样添加表达式?
答:按ALT SHIFT 和等号键,也可以直接接ALT再点码表,如果你喜欢,你也可以在菜单的动画列表下找到它。如果你要临时禁用它,请点击=图标
二、写表达式要注意什么?
1、表达式是区分大小写的,比如:LOVE和LOVe,会被认为是两个东西。
2、写之前,确认你用的是英文输入法,比如一些中文标点,是不被认可的。
3、尽量写英文,这样会让你的表达式和脚本更好地兼容,同时也 更美观,更重要的是,这样逼格更高一些。
4、表达式是忽略空格和换行的,当然你也可以用空格和换行,这样会更方便你阅读。
5、表达式写完一句话,末尾用分号隔开,否则会被认为后面的内容是接着前面写的。
如果,你在里面输入time,结果会是怎样?
在第1秒的时候,不透明度是1;
第2秒,不透明度是2;
第3秒,不透明度是3……
这样,一个动画就生成了
但,这也许不是你想要的,你可能想要的是:
前三秒,透明度是50%,第三至第五秒,透明度变至100%,当然,你可以用关键帧。不过我要讲的是,表达式,这只是为了便于你理解。
你可以这样输入:
clamp(time*25-25,50,100)
time*25是什么意思呢?意是是,第1秒,透明度是25,第2秒,透明度是50,也就是每秒钟增加25的意思。
然后来看clamp,这个命令的作用就是起到一个限制作用,格式是:clamp(a,b,c)意思是:无论a怎样变化,限制a的值始终介于b和c之间。
除此之外,你也有别的选择,比如说:
linear(time,3,5,50,100)
这也是可以的,linear是一个线性映射函数,意是是:当时间从3秒运动到5秒的时候,值从50运动到100。
格式是linear(a,b,c,d,e),意思是:当 a从b变化到c的时候,整个式子的值从d运动到e。
下面来看一个例子,这里我们要学习的是length命令
图上有一个方形和一个圆形,当圆靠近方时,方就逆针转圈,当两者远离时,方就顺针转圈。这是怎么做到的呢?来看表达式:
对方形的旋转添加表达式:
length(thisComp.layer("circle").transform.position,position)
这个式子的意思是:
方形的旋转度数=两个图形之间的距离
length的格式为:length(a,b),这样,得到的结果就是两点之间的距离,再把这个距离赋予旋转角度就可以了。
接下来讲一下valueAtTime命令,这是一个定时函数,常常用来做跟随运动,后面会提到一些更复杂的用法。先来看一个图例,如果我在方形后面写一个表达式:
thisComp.layer("circle").transform.position
这样的话,圆圈的位置就会完全沿用方形的位置,所以二者重合,如图。也就是说二者似乎是粘在了一起。
如果接着在后面加上一个定时函数,变成
thisComp.layer("circle").transform.position.valueAtTime(time-0.5)
这时候 你就会发现,当圆做运动的时候,方形就像个跟屁虫一样跟在后面。如下图
valueAtTime(time-0.5)是什么意思呢?类同楼上,方形仍然取圆形的位置做自己的位置,只不过延迟了0.5秒。也就是说,方形取圆形0.5秒之前的值
再说一下数组的问题,其实在前面就该说了。
比如:
a=[10,20,30],假定这是一个三维坐标。
如果你想取a的第二个坐标的值,20,你应该怎样写?
答案:
a[1]
数组是从0开始计数的,也就是说,
a[0],表示10。
a[1],表示20
……
再如:
position[1],这就表示位置的纵坐标。
下面来说一下曲线方程的问题:
假设你想让上图的方形转着圆转圈,如果你直接旋转,结果是下面这样的:
如果:你不想让矩形改变朝向,只是位置在转圈,而不调头,怎么办?
对方形的位置添加式子:
a=time*Math.PI;
x=effect("Slider Control")("Slider")*Math.cos(a);
y=effect("Slider Control")("Slider")*Math.sin(a);
[thisComp.layer("circle").transform.position[0]+x,thisComp.layer("circle").transform.position[1]+y]
我先来解释一下式子的内容,内容比较多:
Math.PI实际上就是数学的派(原谅楼主打不来希腊字母),由于三角函数默认是弧度制。
第一行实际上就是建一个角度变量a,使其为时间*派,也就是说,两秒钟转一圈(2PI)(我只是举例)
这里的半径R我使用了一个表达式控件代替,方便调节旋转半径:
上面的式子看似复杂,实际上结构就是如下:
a=time*b
x=a*cos e
y=a*sin e
[x+f,y+g]
只不过在表达式里,sin要写成Math.sin,cos要写成Math.cos,原理在22楼已经讲了。
当然,另一种办法就是做一个空对象绕圆转,再把方形的位置链接到空对象上。这似乎更简捷,我只是讲方法。
变量你可以随便取名字,比如:
小明=3;
曾哥=4;
灰太狼=5;
只要不使用它定义好的名字就可以。这样子,小明和3的意思是一样的。
比如说time表示时间,你就不能把变量参数写成
time=5
楼主 2015-07-02 09:30
回复
共有回帖数
0
个
回 帖
表情
图片
视频
欢迎来到本吧,您可以在此发帖和众多大咖交流学习.
选择或直接输入昵称
Tips:支持QQ截图直接粘贴
发表
登录直线网账号
自动登录
忘记密码
免费注册
本吧信息
查看详情
吧主:
孙中跃
本吧公告
后期可能还有其他PS类的教程,请各位亲们敬请期待! 请不要在贴吧内发广告!文明交流 谢谢合作!
我常逛的吧
我管理的吧
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈
|
关于直线
|
版权声明
|
会员须知