小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
效果图
当每一层与另一层接触时,它们就会从黄色变成红色
设计
我们在这里需要做的是创建一个循环,它将检查每个其他当前有视频内容的活动层,看看它们是否足够接近触发接触条件。在这种情况下,当它接近另一个图层时,我们只需要改变图层的颜色。我们将通过为填充效果的颜色参数创建表达式来实现这一点。
在这种情况下,如果我们使用圆形,我们的设置将近似碰撞检测器,因为我们将使用两层之间的距离作为接近条件。即两层宽度之和的一半。
请注意,为了提高效率,一旦我们找到一个满足接触条件的层,我们就会想要跳出这个循环。
表达式代码
out = [1, 1, 0, 1]; ///< 未接触的颜色为黄色
for (i = 1; i <= thisComp.numLayers; i++){ ///< 遍历合成中的所有层
if (i == index) continue; ///< 排除自己
L = thisComp.layer(i); ///< 当前测试的层
if (! (L.active && L.hasVideo)) continue; ///< 跳过那些未激活或者没有视频内容的层
delta = (width + L.width)/2; ///< 设置接触条件所满足的距离
if (length(position, L.position) <= delta){ ///< 小于该距离则被判定为 “接触”
out = [1, 0.25, 0, 1]; ///< 接触的颜色
break;
}
}
out