# 表达式示例

拷贝代码

点击代码框,再点右下角可复制。(部分安卓需要允许网页读取剪贴板的权限)

请自行修改代码内参数来达到自己的效果。

# 震动

打开【变换 - 位置】参数的表达式,拷贝以下代码过去即可让图层晃动起来。

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

Last Updated:  4/17/2023, 4:14:37 PM