心血来潮,想发一点教程。
众所周知,AE表达式提供了非常强大的功能,几乎任何带秒表图标的属性都可以插入表达式进行控制,只需通过按住alt键点击秒表图标即可。这个系列主要是关于个人AE表达式的一些心得,主要面向初心者,希望能起到抛砖引玉的作用,让更多人了解AE表达式。本人没有系统学过javascript,如有错误敬请指出。
(资料图片)
(以上为废话)
AE的文本图层,有一个源文本属性,不仅可以通过关键帧设置不同时刻的文字内容(可以用这个功能打轴),还能通过代码来生成文本。
于是我们可以输入以下代码:
这样就能实现这一功能了。本教程在这一刻就可以结束了。
然而仅仅只会复制表达式是不够的,需要了解其中的原理,才能充分发挥表达式的威力。
第一行的seedRandom函数,它的作用是用第一个参数,为之后的所有随机函数设置随机种子。随机种子就是计算机生成随机数的依据。玩MC的同学应该知道生成地图时所用的种子,假如你输入的种子是一样的,那生成的地图也是一模一样的。
那为什么要添加这一行呢?首先,AE在每一帧,都会重新运行一次表达式,如果不设置随机种子,AE默认每一帧都会生成不同的随机种子。文本框内的数字每一帧都会刷新,对视力无疑是极大的伤害。于是,我们需要隔几帧再刷新一次。
要实现这个功能,需要用到时间(time)和取整()函数。
time输出的是小数,它等于从合成开始到当前时间所经过的秒数。
函数是向下取整。这样(time)输出的就是不带小数的秒数,它的值每过1秒才会改变。
顺带一提,ae的表达式输入框左边有一个小箭头,里面有很多常用的函数和属性。点击一下就能显示在文本框中,这样就不用手打所有的函数名了。
于是我们可以通过将time乘20,这样(time*20)的值每1/20秒改变一次,将这个参数传入seedRandom函数,这样之后生成的随机数每过1/20秒才会改变。
(当然也可以用色调分离时间设置图层帧率为20帧)
seedRandom函数还有第二个参数,它只能取真(true)或假(false)。如果取true,则每过一帧都会设定新的随机种子;如果为false,则随机种子的取值只由第一个参数决定,不受时间影响。这里显然要设置为false。
这一行代码可以用来设置随机数改变的频率,应用次数非常高,有必要的话请务必记下。
接下来便是代码的核心部分。首先看循环内部的这一行代码:
mytext变量内,存储的是将要显示的文本内容。+=符号表示的是,每过一个循环,就将符号右侧的内容拼接到mytext内容的末尾。
array[(random(16))]可能看起来比较抽象,但我们可以从内而外一层一层地来看。
random函数是ae自带的一个产生随机数的函数,random(16)可以产生0-16范围内(大于0,小于16)的随机小数。然后经过向下取整,就能得到0-15范围内的随机整数了。
array是在开头定义的一个字符串,内容是"0123456789ABCDEF"。对于字符串变量,在后面添加方括号,方括号内的数值就表示取第几个字符。要注意,序号是从0开始数的。比如array[0]="0",array[4]="4",array[15]="F"。
将0-15范围内的随机数传入中括号,就能在array内随机取一个字符。连续取两个字符,再拼接一个‘ ’(表示空格),这就是每次循环所做的事情。
内侧的循环打印每一行,内侧循环结束后打印换行符,从下一行开始。如此当外侧的循环也结束后,就得到了一个随机的十六进制数字阵列。最后的=mytext,就能将变量内的值显示出来,这样就大功告成了。
最后提一嘴,ae内的表达式虽然与javascript有很高的相似性,但还是有一些不同之处,比如变量在初始化时不需要声明var或let(可能会造成求值错误,所以不推荐),一些函数的用法也有细微的差别。可以查阅/cn/after-effects/using/了解更多函数的用法。
以上。
标签: