我如何在 After Effects 中使用 Video Copilot Saber 将锚点定位到一条线的中心?

How would I get the anchor point to the center of a line with Video Copilot Saber in After Effects?

我试图让这把军刀从中心旋转,同时不断在两点之间设置锚点(核心起点核心终点):

我更喜欢必须 运行 一个表达式来执行此操作,但如果有其他方法,请告诉我!

我正在使用这个表达式:(它被放置在 Transform > Anchor Point 中)

x1 = effect("Saber")("Core Start")[0]
x2 = effect("Saber")("Core Start")[1]
    
y1 = effect("Saber")("Core End")[0]
y2 = effect("Saber")("Core End")[1]
    
transform.anchorPoint([x1/y1], [x2/y2])

但是出现错误:

undefined value used in expression (could be an out of range array subscript )

在表达式(和 Javascript)中,您需要以分号结束每一行。这是您使用的表达式的 第一个 问题。

但就目前而言,表达式不会为您提供所需的结果。要找到两点的中心,您需要的是这两点的平均值。任何 n 项的平均值是所有项的总和除以 n。因为您可以在表达式中添加点,并且可以将点乘以和除以标量(单个值,如数字),所以您所要做的就是将点相加并除以 2。

最后,您似乎对表达式的工作原理存在误解。要设置 属性 的值,您需要编写一个表达式,使 return 的值与 属性 匹配。对于 return 一个值,表达式引擎会寻找一个计算结果为某物的术语。您可以编写的最简单的表达式类似于

[123,345]

这是一个有效的表达式。无聊,但有效(我有时将这样的静态术语写成表达式作为“锁定”属性 的一种方式,因为表达式会覆盖 属性 控件。

所以你不需要,而且在最后一行使用 transform.anchorPoint() 是不正确的。它不是函数,因此以您现有的形式使用它会导致错误。

TL;DR

let startPt = effect("Saber")("Core Start"); //N.B. semicolons
let endPt = effect("Saber")("Core End");
(startPt + endPt)/2; //this line evaluates to an array

变量声明开头的let限制了变量的范围。这不是必需的,但这是一个很好的做法。

您可以更简洁,将其作为单行代码来执行,但要牺牲可读性:

(effect("Saber")("Core Start") + effect("Saber")("Core End")) / 2

我建议你去看看一些基本的 JS 教程,以及阅读 docs about expressions