≡
导航
搜索
教程
插件
模型
模板
博客
交易
朋友
AE交流区吧
已关注 | 取消
+关注
关注:
84
帖子:
711
签到
05月10日 尚未签到
看帖
图片
精品
视频
共有回帖数
0
个
下面是这个表达式的效果动画:
取消只看楼主
收藏
回复
孤单的狼
等级:
下面是这个表达式的效果动画:
上图是这个小球的运动轨迹,下面我们来解答一下这个表达式。
首先,这个表达式形成了一个从左至右震荡前进的动作(Math.PI是JS的一个属性得出的结果就是趋近于3.1415的一个数值,π就是上学时都学过的圆周率),thisComp.height/2,thisComp是调取当前合成,height就是合成的高度,这句的意思是调取合成的高度并除以2,加上这句的意思是让Y轴的位置位于合成的中间。Y做的几次乘法,在这里我就不过多解释了,根据英文的意思大家应该可以看懂,最简单的方法就是将表达式粘贴到AE中,自己试验一下。
对于表达式,我们还可以给X轴添加从左至右移动的关键帧,Y轴运用表达式驱动,同样可以达到相同的效果。
表达式如下:
veloc = 170; //平行移动加速度 (40像素/秒)
amp = 48; //正弦曲线振幅(像素)
freq = 4.8;//震荡次数/秒
y = amp*time*Math.sin(freq*time*2*Math.PI);
position + [0,y]
注意这里我们去掉了驱动X轴运动的 x = veloc * time,增加了一句 position + [0,y] ,意思就是用物体本身的位置加上表达式计算出来的位置。
下面我们在来说说弧度,JS的三角函数的单位是弧度,不是度。这样,一个完整的震荡周期就是π值的两倍。所以,如果希望我们的频率是每秒一个完整的振幅(我们上面的例子里面也乘以2了)我们就需要将π值乘以2,后面大家会大量看到我们“2*Math.PI”。
我们再看一个例子,如果我们希望刚才的动画改为震动向上移动,我们看看表达式是如何写的:
veloc = 170; //平行移动加速度 (40像素/秒)
amp = 48; //正弦曲线振幅(像素)
freq = 4.8;//震荡次数/秒
x = time*veloc;
y = amp*time*Math.sin(freq*time*2*Math.PI - 1) /2+ thisComp.height/2;
[x,y]
这里我们做了一点点小的调整,首先我们让Math.sin()函数减1,这样我们得到的曲线就从-1 至 1,变成了-2 至 0。然后我们有除以2,这样这个范围就变成了-1 至 0。为什么要是-1 至 0呢?我们不是要向上的运动吗?因为AE向上是在负Y轴的方向。
好,下面我们再做一些调整,让这个运动的振幅恒定,不要随着时间震动增大。
veloc = 180; //平行移动加速度 (180 像素/秒)
amp =48; //正弦曲线振幅(像素)
freq = 4.8; //震荡次数/秒
rise = 20; // 正弦曲线向上移动的速度 (像素/秒)
x = time*veloc;
y = amp*Math.sin(freq*time*2*Math.PI) - rise*time + .6*thisComp.height;
[x,y]
咱们在看看这样的运动是如何达成的,首先我们新增了一个“rise”参数,这个rise定义了我们正弦曲线向上移动的速度。Rise乘以time用来计算Y轴的移动。Math.sin()这个参数没有乘以时间,所以我们的移动没有随着时间而变化。最后.6*thisComp.height可以让位移运动在合适的位置。
下面,我们再看一种变化,我们让物体随着从左至右移动的同时频率逐渐增加。
veloc = 180; //平行移动加速度 (180 像素/秒)
amp = 32; //正弦曲线振幅(像素)
freq = 1; //震荡次数/秒
x = time*veloc;
y = amp*Math.sin(freq*time*time*2*Math.PI) + thisComp.height/2;
[x,y]
达到这种效果是因为我们在Math.sin()这个函数中写了两次“time”,大家可以自己在AE中实验一下。
我们最后再看一种比较有用的变化,如果我们将两个正弦曲线相乘,我们会得到什么结果呢?如果其中一个波浪的频率比另一个小一点,我们下面的是freq1小于freq2,这样我们会的得到一个忽快忽慢的运动,我们看看下面的表达式。
veloc = 170; //平行移动加速度 (170 像素/秒)
amp = 32; //正弦曲线振幅(像素)
freq1 = 0.5; //震荡次数/秒
freq2 = 7.0;
x = time*veloc;
wave1 = Math.sin(freq1*time*2*Math.PI);
wave2 = Math.sin(freq2*time*2*Math.PI)
y = amp*wave1*wave2 + thisComp.height/2;
[x,y]
好了,本次我给大家演示了几种sin()和cos()的用法,在后面的课程中我们还会大量用到这两个函数,工程文件大家可以点击链接下载,今天的内容相对复杂很多了,希望大家可以自己上机试一下,你会觉得非常有意思的,
楼主 2015-12-02 13:43
回复
共有回帖数
0
个
回 帖
表情
图片
视频
欢迎来到本吧,您可以在此发帖和众多大咖交流学习.
选择或直接输入昵称
Tips:支持QQ截图直接粘贴
发表
登录直线网账号
自动登录
忘记密码
免费注册
本吧信息
查看详情
吧主:
刘永飞
本吧公告
暂无公告
我常逛的吧
我管理的吧
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈
|
关于直线
|
版权声明
|
会员须知