Javascript 在后效中,如何将锚点定位到视频副驾驶Saber的直线中心?

Javascript 在后效中,如何将锚点定位到视频副驾驶Saber的直线中心?,javascript,adobe,extendscript,after-effects,Javascript,Adobe,Extendscript,After Effects,我试图让这把军刀从中心旋转,同时在两个点(核心起点和核心终点)之间保持固定点: 我更喜欢运行一个表达式来实现这一点,但如果有其他方法,请让我知道 我使用这个表达式:(它被放置在Transform>锚点中) 但有一个错误: 表达式中使用的未定义值(可能是超出范围的数组下标) 在表达式(和Javascript)中,您需要以分号结束每一行。这是您使用的表达式的第一个问题 但从目前的情况来看,这个表达式不会给你想要的结果。要找到两点的中心,你需要的是这两点的平均值。任何n项的平均值是所有项之和除以n。

我试图让这把军刀从中心旋转,同时在两个点(核心起点和核心终点)之间保持固定点:

我更喜欢运行一个表达式来实现这一点,但如果有其他方法,请让我知道

我使用这个表达式:(它被放置在Transform>锚点中)

但有一个错误:

表达式中使用的未定义值(可能是超出范围的数组下标)

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

但从目前的情况来看,这个表达式不会给你想要的结果。要找到两点的中心,你需要的是这两点的平均值。任何n项的平均值是所有项之和除以n。因为可以在表达式中添加点,也可以用标量(单值,如数字)乘和除点,所以只需添加点并除以2即可

最后,您似乎对表达式的工作方式有误解。要使用设置属性值,需要编写一个表达式,返回与属性匹配的值。要返回一个值,表达式引擎将查找计算结果为某物的术语。你能写的最简单的表达式是

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

因此,您不需要,并且在最后一行中使用
transform.ancorpoint()
是不正确的。它不是一个函数,因此以您现有的形式使用它将导致错误

TL;DR

let startPt=effect(“Saber”)(“Core Start”);//注意分号
让endPt=效应(“军刀”)(“核心端”);
(startPt+endPt)/2;//此行的计算结果为数组
变量声明开头的
let
限制了变量的范围。这不是必需的,但它是良好的实践

您可以更加简洁,以牺牲可读性为代价,将其作为一行:

(effect("Saber")("Core Start") + effect("Saber")("Core End")) / 2
我建议你去看看一些基本的JS教程,同时阅读表达式(和Javascript)中的。

,你需要在每行末尾加上分号。这是你使用的表达式的第一个问题

但目前的表达式并不能给出你想要的结果。要找到两点的中心,你需要的是这两点的平均值。任何n项的平均值是所有项的总和除以n。因为你可以在表达式中加点,也可以用标量乘和除点(单值,如数字),只需添加点并除以2即可

最后,您似乎对表达式的工作原理有误解。要设置属性的值,您需要编写一个返回与属性匹配的值的表达式。要返回值,表达式引擎将查找计算结果为某个值的项。可以编写的最简单表达式如下

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

因此,您不需要,并且在最后一行中使用
transform.ancorpoint()
是不正确的。它不是一个函数,因此以您现有的形式使用它将导致错误

TL;DR

let startPt=effect(“Saber”)(“Core Start”);//注意分号
让endPt=效应(“军刀”)(“核心端”);
(startPt+endPt)/2;//此行的计算结果为数组
变量声明开头的
let
限制了变量的范围。这不是必需的,但它是良好的实践

您可以更加简洁,以牺牲可读性为代价,将其作为一行:

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

我建议你去看一些基本的JS教程,同时也要阅读。

你是在问如何计算起点和终点之间的中心点吗?那就是x_center=(x_start+x_end)/2和y_center=(y_start+y_end)你是在问如何计算起点和终点之间的中心点吗?那就是x_center=(x_start+x_end)/2和y_center=(y_start+y_end)/2。