# 表达式示例
拷贝代码
点击代码框,再点右下角可复制。(部分安卓需要允许网页读取剪贴板的权限)
请自行修改代码内参数来达到自己的效果。
# 震动
打开【变换 - 位置】参数的表达式,拷贝以下代码过去即可让图层晃动起来。
wiggle(5,1)
# 循环播放
先为【变换 - 位置】添加两个关键帧让图层运动起来,再打开表达式,拷贝以下代码过去即可让运动循环。
loopIn()
# 图层逐个下落
打开【变换 - 位置】参数的表达式,拷贝以下代码。然后将该图层复制多个,比如5个,播放后每个图层会依次开始动画。
spd=2.0//速度
interval=0.2//间隔
[0.5,easeOut(time*spd-index*interval,1.5,0.5)]
# 倒计时
创建一个【文字】图层,打开【文本】参数的表达式,拷贝以下代码。
n=1//小数点位数
start=10//计时时间
suffix=""//后缀
toFixed(start-time,n) + suffix
# 显示时间码
创建一个【文字】图层,打开【文本】参数的表达式,拷贝以下代码。
timeToTimecode()
# 每秒显示一个随机数
创建一个【文字】图层,打开【文本】参数的表达式,拷贝以下代码。
posterizeTime(1)//设置表达式每秒更新一次
toFixed(random(0,100),0)//取得一个0-100的随机数
# 环绕声
导入任意音乐,打开【音频-左声道-音量】表达式,拷贝以下代码:
spd=2.0
(sin(time*spd)+1)*0.5
继续打开【音频-右声道-音量】表达式,拷贝以下代码:
spd=2.0
(sin(time*spd+pi)+1)*0.5
# 保持图层不跟随组旋转
默认图层是跟随组一起旋转的,如果你想保持某个图层不动,可以打开【变换-旋转】参数的表达式并拷贝以下代码。
parent = thisLayer.parent
//parentRot = 0
parentRot=value*0//更通用的清0方式
while parent != null
parentRot += parent.rotation
parent = parent.parent
end while
//-parentRot
parentRot*-1//暂时只能通过*-1来取反
# 保持图层在两个图层间的中心位置
创建任意两个图层,为他们的【变换-位置】打上关键帧动画。再创建一个图层,将它放在他们中间,然后打开它的【变换-位置】表达式,拷贝以下代码。该图层会保持在左右两个图层的中间。
(layer(-1).position+layer(1).position)/2
# Q弹抖动
打开【变换 - 缩放】参数的表达式,拷贝以下代码过去即可让图层抖动起来。
spd =20//速度
amplitude =0.5//振幅
decay = 3//衰减
startTime=0//开始时间
if time < startTime then
value
else
offset = amplitude*sin(time*spd)/exp(time*decay)
scaleX = value[0] + offset
scaleY = value[1] - offset
[scaleX,scaleY]
end if
# 弹跳
先为【变换 - 位置】添加两个关键帧让图层运动起来,再打开表达式,拷贝以下代码。如果效果太小或者太大,请自行修改strength参数。
elasticity = 0.7//弹性,范围[0-1]
gravity = 5//重力
maxCount = 9//最大弹跳数
strength = 30//弹跳力度
n = nearestKey(time).index
if key(n).time > time then
n -= 1
end if
if n > numKeys - 2 then
t = time - key(n).time
v = value * 0 - velocityAtTime(key(n).time - frameDuration / 10) * elasticity
vl = length(v) * strength
if vl > 0 then
vu = normalize(v)
else
vu = value * 0
end if
tCur = 0
segDur = 2 * vl / gravity
tNext = segDur
nb = 1
while tNext < t and nb <= maxCount
vl *= elasticity
segDur *= elasticity
tCur = tNext
tNext = tNext + segDur
nb += 1
end while
if nb <= maxCount then
delta = t - tCur
value + vu * delta * (vl - gravity * delta / 2)
else
value
end if
else
value
end if
# 惯性反弹
先为【变换 - 位置】添加两个关键帧让图层运动起来,再打开表达式,拷贝以下代码过去即可。如果效果太小或者太大,请自行修改amp参数。
amp = 1//振幅
freq = 3//频率
decay = 4//衰减
duration = 2//持续时间
nK = nearestKey(time)
if nK.time<=time then
n=nK.index
else
n=nK.index-1
end if
if n != 0 then
t=time - key(n).time
end if
if n > numKeys - 2 and t < duration then
v = velocityAtTime( key( n ).time - frameDuration/10 )
value + v * amp * sin(freq * t * 2*pi) / exp(decay * t)
else
value
end if