脚本分析01-移动锚点工具(UI篇)

By 八月 28, 2017 After Effects, 脚本预设

下载地址:http://pan.baidu.com/s/1ctVT6Y

放在脚本文件夹的Script UI文件夹内就好了。

原作者的信息都在脚本开头,我只是做的分析和汉化,包括一些脚本注释的汉化,再按着自己的习惯改了几个变量名。

主要是为了学习脚本开发,这仍然是属于原作者的脚本。

没有在UI上添加任!何!我!的!信!息!!

也没有加!密!脚!本!!


另外要再吐槽一下官方的编辑器ExtendScript Toolkit,一些错误会选择性的忽略提示,并且代码自动补全功能贼狗屎,甚至会影响到正常写代码。自动换行也很奇葩。

但是做一些简单代码测试的时候,一键运行确实又非常方便。所以暂且还是先用着吧。


这次分析的脚本是一个移动锚点的脚本,同类型的脚本很多,motionV2也有一个。

主要是学习了一般脚本的设计框架,没有特别的针对性。

总得来说学到了不少,单单看文档肯定是想不到的。

那就开始吧,整体源码不贴上来了,看之前先下载那个压缩文件就可以了。


UI篇

这就是脚本的界面,脚本先是创建了UI,然后定义了一个函数来响应这些按钮。

一开始是我添加的一个脚本常量,添加完一个后发现并没有别的可添加的了。

然后是一个三元运算符,返回的是一个窗口对象。这个三元运算符算是学到的最有用的知识点了。

首先说 instanceof 运算符,在AE脚本中,可以理解为这个对象是否属于后面的那个类。

this 在全局环境中表示的窗口对象, Panel 这个文档里没有说,不过应该指的是AE的面板,而不是一个窗口类型,否则从语法上还是逻辑上都说不通。

AE面板指的就是那种可以浮动或者停靠在AE界面中的面板,直接表现就是脚本名称后面有一个三条横线的菜单,而且这种脚本可以放在ScriptUI文件夹中,从Window菜单中找到,如果直接使用File->Scpirt中运行,是不会出现这个三条横线菜单的。当然前提是你的window对象类型是palette。

这段代码的意思是如果使用AE的Panel面板打开的话就直接使用这个窗口,否则(从File->Script打开)就新创建一个窗口。

如果是没有这个比较符,直接创建一个窗口,从File->Script中打开没问题,但是从Window菜单栏打开只会显示一个空面板,没有UI(这是脚本中没有 w.show() 的情况),(如果有窗口显示方法,)再直接一个普通窗口显示脚本内容,没有停靠按钮。

如果把脚本直接作为AE面板停靠在AE界面上时,再次打开AE,开启后AE会自动打开这些停靠的脚本,所以有时候即便AE打开了也会失去响应一会才可以正常使用,正是在打开这些脚本,停靠的脚本越多这个失去响应的时间也就越长。

但是想创建可以停靠的AE脚本,这个运算符是创建窗口必要条件。

然后给窗口一个横向排列属性,不过这个脚本中各个元素都是规定好位置了,不需要自动布局,所以脚本使用Window菜单栏打开时候这个代码倒是可有可无,不过直接File->Script运行时就会不同了,下面会说到。

在下面的代码是创建一个组,这个组是用来容纳锚点那九个按钮的。组这个控件类型虽然看不见,但是能够很有条理的来控制元素位置。


try{}catch{} 是成对出现的,用来测试错误代码。这个搜索一下网上很多讲解。

try内部是引用图片,并使用图片作为一个图标按钮。catch则是为了防止引用图片时出错给出的提示,如果没有这个机制,AE只会告诉用户出错了,不会说具体哪里出了问题,对于用户来说很不友好。

另外这里图片的引用也有个问题,正常如果把脚本和图片文件夹放在同一目录下,直接在引用的时候写相对路径就可以了,但是如果使用ExtendScript打开脚本然后运行会报错,无法引用图片,只能是使用绝对路径引用。

下面是添加图标按钮,都是使用的组,并且是横向布局,这样组内的元素就可以把组当做父级来做相对布局,而不是整个窗口了。


然后定义了左边的自定义按钮组和一个忽略蒙版复选框。

自定义按钮组中的 w.g2.stx 变量赋值了两次,主要是为了代码美观,后面其实没有需要调用这个静态文字的地方,命名两个变量没有必要,反而还会浪费资源。

这个忽略蒙版复选框比较有意思,正常的标注位置就是上面图中的位置,处于锚点位置按钮的下面,但是如果使用File->Script打开的话,会出现在右边。

这是原版脚本直接运行的UI,可以看见没有了可以停靠的按钮,复选框也变了位置。

如果脚本开头没有声明 w.orientation = "row" ,布局又会不同了。

当然从Window菜单栏打开时候UI都是一样的。

不要让脚本UI横向太长,不然的话用户在停靠AE界面上时(一般是停靠在右侧),需要横向拖动一大块才会全部显示脚本内容,纵向多长无所谓,但是横向太长会影响到预览窗口和其他窗口的位置。这也算是一个小经验吧。

最后一个同样是判断窗口当前状态,来决定是否调用窗口显示方法。如果是作为AE面板使用的话,不需要使用该方法,AE同样会显示窗口,当然直接作为脚本运行的话还是需要的。


这个是为按钮创建点击回调函数,点击按钮后就会调用此函数。

有两个要注意的,一个是撤销函数的文本只能是英文,中文会乱码。

再就是作者先是定义了这个回调函数,其中调用的moveAnchor()函数还没有声明呢。

至此UI篇就结束了。

 

发表回复

让技术与审美并行