我如何在 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。
我试图让这把军刀从中心旋转,同时不断在两点之间设置锚点(核心起点和核心终点):
我更喜欢必须 运行 一个表达式来执行此操作,但如果有其他方法,请告诉我!
我正在使用这个表达式:(它被放置在 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。