Modulus函数
Modulus简单说就是求余,在AE表达式里用“%”表示,比如:
5÷3=1余2
那么表达式里:5%3 返回值就是2
解释了这个函数,我们就可以来说怎么实现文字闪烁了,首先建立一个文字层,随便输入几个字作为占位符,然后给sourceText添加表达式。
效果是这样的:
解释一下这个表达式:
首先建立一个文字阵列t = ["飞向","电影","致力于","视频","创意"],在AE表达式里的阵列[0]代表第一个值,[1]代表第二个值……依次类推。这里引入了变量t,所以t[0]就是“飞向”,t[1]就是“电影”。
为了让时间线播放时候字体自动切换,引入time,t[time]就可以实现变化,比如time为1时,就是“电影”。time的单位是秒,其值是有小数点的,所以增加一个Math.floor向下取整的函数。
接着要解决的是:上面定义的文字阵列t中,只有5个值,当time≧5之后,表达式就会报错,因为阵列里并不存在[5]。这里就需要用到Modulus函数了:
5÷4=1余1,返回值是1 ;
6÷4=1余2,返回值是2 ;
……
表达式写作Math.floor(time)%4,就可以循环播放了。之所以%4,是因为上面文字阵列长度是4,所以这个数字可以用length代替。最后表达式写作:
- t = ["飞向","电影","致力于","视频","创意"];
- n = Math.floor(time)%t.length;
- t[n]
Split()函数
split函数允许把内容分割成为阵列。用法很简单,比如这个例子里,我并不向每次更改文字内容都要到表达式编辑界面,而是希望直接更改文字层。所以让“t”直接拾取sourceText
t = text.sourceText;
然后将“t”分割成为整列
s = t.split(" ");
引号里的值就是定义用什么来分隔阵列,可以是空格、回车、逗号等等。当然还需要把地下两行的“t”改成“s”,因为这里我们需要的是阵列“s”,最后表达式就是:
- t = text.sourceText;
- s = t.split(" ");
- n = Math.floor(time)%s.length;
- s[n]
但是其实这样做依然有个问题,因为链接到的是本图层的文字内容,窗口显示的会是经过表达式运算的内容。也就是说,在编辑文字内容时候,窗口显示的只会根据当前时间线位置显示阵列中的一个值,非常不方便。
解决办法就是新建文字层,把“t”的值拾取过来:
这样可以直接在新建的文字层上输入和编辑内容,编辑完后隐藏就可以了。表达式变成为:
- t = thisComp.layer("飞 向 电 影").text.sourceText;
- s = t.split(" ");
- n = Math.floor(time)%s.length;
- s[n]
这个表达式里是用空格作为split函数分隔的依据,AE表达式用的是JavaScript,可以用“\ r”(中间无空格)来代替“回车”。这样方便输入大段的文字。
这里向安宇复制了一段之前分享的弹性表达式作为文字内容,并把添加了上述表达式的文字层复制基层,调整y轴位置让他们上下排列好,就实现了文字滚动的效果了。
其表达式如下(加上index是为了让每层文字不同):
- t = thisComp.layer("flytofilm").text.sourceText;
- s = t.split("\r");
- n = Math.floor(time*4)%s.length;
- s[n+index]
请登录以参与评论
现在登录