AEJoy —— 表达式之模拟 Bezier 曲线【JS】

575 阅读2分钟

效果图

099.gif

正文

这个小练习演示了如何让一串对象遵循由四个空(Null)层组成的伪(模拟)贝塞尔曲线。首先创建四个空层。“Null 1” 和 “Null 4” 将是锚点,“Null 2” 是 “Null 1” 的句柄,“Null 3” 是 “Null 4” 的句柄。让 “Null 1” 成为 “Null 2” 的父结点(parent),让 “Null 4” 成为 “Null 3” 的父结点(parent)。创建一个小的纯色层(我用 25x25 大小),并给纯色层应用了一个圆形蒙版(它增强了“珍珠串”的效果)。将这个表达式应用于位置属性:

N1 = thisComp.layer("Null 1"); 
N2 = thisComp.layer("Null 2"); 
N3 = thisComp.layer("Null 3"); 
N4 = thisComp.layer("Null 4");  
p0 = N1.position; 
p1 = N2.toWorld(N2.anchorPoint); 
p2 = N3.toWorld(N3.anchorPoint); 
p3 = N4.position;  
c = 3*(p1 - p0); 
b = 3*(p2 - p1) - c; 
a = p3 - p0 - c - b;  
t = index/(thisComp.numLayers - 3); 

((a*t +b )*t + c)*t + p0 

纯色层将移动到伪贝塞尔曲线的中间。复制纯色层若干次,使得纯色层(小圆)将沿着曲线展开。移动锚点和手柄,观察曲线如何变化。你甚至可以旋转锚点。关于这个公式 t 表示曲线上的位置,它的取值范围是 0 到 1 。在 t = 0 时,位置是 “Null 1”,在 t = 1 时位置是 “Null 4” 。所以如果你想让某个东西沿着曲线移动,你只需将这行从层索引派生出来 t 的代码,用某个生成范围从 0 到 1 的值的函数来替换它。

你也可以修改代码,使用滑块控件,它已经被添加到 “Null 1” 来控制压缩/展开。设置滑块的范围从 -1 到 1,并替换

t = index/(thisComp.numLayers - 3);

为以下代码

t0 = index/(thisComp.numLayers - 3); 
s = N1.effect("Slider Control").param("Slider"); 
if(s < 0){   
    s += 1;   
    t = t0*s; 
}else{   
    t = s + t0 - s*t0; 
} 

你可以在滑块上添加一个这样的振荡表达式,以使纯色层(小圆)来回波动:

amplitude = .5; 
period = 1.0 //seconds  

amplitude*Math.sin(time*Math.PI*2/period); 

必要时调整振幅和周期。

(完)