教程的视频内容为在线学习网站【沃CG】的付费内容,这是我在学习过程中做的笔记
@toc
第1章: 课程介绍
课程介绍
ae脚本可以代替重复性的人工操作和复杂的数学计算,设计师能有更多的时间专注于视觉表现上
编写ae脚本的门槛:编程能力、英语能力
- 第一天:ae表达式和脚本、插件的区别;JavaScript基础(数据类型、变量)
- 第二天:编程语言流程控制的部分(判断、循环、函数)、面向对象
- 第三天:ae的各个接口、用脚本控制合成、图层的属性
- 第四天:添加关键帧、脚本界面的编写
- 第五天:综合脚本的开发案例
第2章: 脚本基础
ae表达式、脚本、插件的区别
-
表达式
表达式加在属性上(为属性赋值)、表达式每一帧都会运算一遍
比如:wiggle(1,20)
-
脚本
脚本使用JavaScript编写,脚本语言不需要编译,脚本语言是执行性的语言
ae首选项,要启用这两项
allow scripts to write files and access network(允许脚本访问网络)
enable JavaScript debugger(启用JavaScript 调试器) -
插件
插件使用C、C++编写
插件分为:特效插件、文件导入导出插件、通用插件、渲染引擎插件
通用插件:它在ae其他的菜单栏中出现,有自己的独立界面,如ae的二维动力学插件“牛顿”
第3章: ExtendScript Toolkit软件介绍
EXTK软件介绍
ExtendScript是用JavaScript拓展出来的,他们的基础语法是一样的
软件界面
切换脚本在那个软件里运行
运行在“主空间
运行、暂定、停止、后面三个是在debug时用到
debug :排除错误
JavaScript console(JavaScript控制台):输出脚本运行数据
undefined未定义的
data browser:用于浏览数据
function:定义的函数在这个面板显示出来
breakpoints:打的断点在这个面板显示
call stack:当函数存在嵌套关系时,一个函数调调用了另一个函数,这个面板告诉你代码运行的路线是怎么样的
scripts:列出软件现有的脚本
菜单栏help:中有一些文档
《adobe intro to scripting》:adobe脚本编写的介绍
《javascript tools guide cc》:adobe脚本编写中可以操作的通用功能(文件的写入、窗口界面UI、adobe软件之间的交互、访问网络、C、C++写的库、访问XML文件、访问XMP文件)
xml用来存配置文件
xmp,比如给视频加一个头文件,注释等…
设置字体
edit>preference>fonts and colors
节子老师推荐使用:consolas
alert(“hello world”);//alert 用于弹出一个提示框
第4章: AE基础
通过这个小案例:在ae中创建一个合成、在这个合成中新建一个固态层,并画一个mask
简单了解一下脚本是如何来控制ae里的元素
这些“元素”在JS中都被称之为“对象”
//标注版
app.beginUndoGroup("创建一个合成、固态层画一个mask");//回退组,ctrl+z撤销时,会撤销这整个组的内容
var comp = app.project.items.addComp("合成1",1920,1080,1.0,30.0,24);
//("合成名字"、宽度、高度、像素宽高比、持续时间、帧数率)
var layer = comp.layers.addSolid([1,1,1],"固态层",1280,720,1);
//255=1 0-255 就是0-1
//(颜色、固态层名字、宽度、高度、像素宽高比、持续时间)
var mask = layer.Masks.addProperty("Mask");//给layer加一个mask
//mask、特效的性质 都是一个Property(属性)
var maskShape= mask.property("maskShape");//获取maskpath属性
var maskShapeValue = maskShape.value//获取值
maskShapeValue.vertices = [[100,100],[800,100],[800,440],[100,400]]
//设置新的值
maskShape.setValue(maskShapeValue);//为新的值生效
app.endUndoGroup();
//无标注版
app.beginUndoGroup("创建一个合成、固态层画一个mask");
var comp = app.project.items.addComp("合成1",1920,1080,1.0,30.0,24);
var layer = comp.layers.addSolid([1,1,1],"固态层",1280,720,1);
var mask = layer.Masks.addProperty("Mask");
var maskShape= mask.property("maskShape");
var maskShapeValue = maskShape.value;
maskShapeValue.vertices = [[100,100],[800,100],[800,440],[100,400]];
maskShape.setValue(maskShapeValue);
app.endUndoGroup();
第5章: 程序语言基础
变量
“变量”是用来存“数据”的容器
- 使用方法:var 变量名 = 数据内容
var (定义变量的方法)、后面接 “变量名”、“=”、“数据内容”
"=" 为变量赋值(可以先声明变量,在用到这个变量时,再给它赋值也可以)
如var a,b,c,d,e,f,g
a=1,b=2,c=3
"数据内容"它可以是数字、字符串、布尔值....
- 变量名
- 变量名不能是特殊字符(如:中文、特殊符号)
- 变量开头字符不能是数字
- 变量名是唯一性的
var my_comp;//这种方法比驼峰命名看起来更舒服一些
var myComp;//驼峰命名法
编写代码的一些习惯
// 双引号 后面的内容为备注,它不会运行(这一点对初学者很重要)
养成良好的习惯,在每一行的代码结束的位置输入一个“;”分号
输入子层级代码时,要相对父代码,留出一个“tab”的缩进,这样的代码看起更友好
数据类型
-
字符串
"你好","5"
可以使用双引号、或单引号
-
整数
0,1,3, 4 ,5 -
浮点数
0.5,8.85,0.001 -
布尔值boolean
true,false
true 表示:是、1、启用
false 表示:不是、0、不启用
-
对象object
很多数据的一个组合 - 未定义undefined
-
空值null
能用整数就不要用浮点数
一定要用浮点数的时候,可以在数字后面加一个.f
如:30.f
它表示的就是一个浮点数
字符串的方法
更全面的有关字符串的方法请访问:https://www.cnblogs.com/imguo/p/5768717.html
var i = "abcdefjhljklmn"
alert(i.length()); //.length() //可以求出当前字符串的长度
alert(i.charAt(3)); //编程中第一位是0、这里的3就是第四位“d”
//.charAt()//查看某个位置的字符是什么内容
alert(i.slice(0, 10)); //切块的作用 这里的i.slice(0,10) 表示的就是保留第一位到第十一位中间的字符
alert(i.slice(0, -1)); //保留全部字符
alert(i.toUpperCase()); //把内容全部转为大写
alert(i.toLowerCase()); //把内容全部转为小写
数据类型的转换
转换为整数
parseInt(texe,base)
parseInt("3");
parseInt(3.1415926);//它会直接去掉小数部分
texe接收字符串(字符串内容为数字)或数字,字符串的内容必须是数字
默认base就是10,一般不用管
转换为浮点数
parseFloat(texe,base)
如:alert(parseFloat("3")+1.5);
NaN 表示转化出错
转换为字符串
toString();
如:toString(5400215); //它得到的结果就是"5400215"
运算符
数字之间的运算
var a = 123+321;//加
var b = 12-321;//减
var c = 123*321;//乘
var d = 123/321;//除
var e = 123%321;//求模
//求模指的是:a除b除不尽,第一次留下的余数、求模运算常用来判断数值是“奇数”还是“偶数”
字符串的运算
var i = “我不知道”+“你的名字”;//得到的结果就是:“我不知道你的名字”
自加和自减
var a = 5;
a++;
//++的意思:就是自加1(自己+自己得到的结果)
//这里的a++ 就是a=6
var b = 5;
b--;
//--的意思:就是自减1(自己-自己得到的结果)
//这里的b-- 就是b=4
var c = 5;
c+=4;
//+=的意思:就是自加一个数(自己加一个数,然后得到的一个结果)
//这里的c+=4 就是 c=9
var d = 5;
d-=4;
//-=的意思:就是自加一个数(自己减一个数,然后得到的一个结果)
//这里的d-=4 就是 c=1
//同样的这种方法适用于“自乘”、“自除”
var e = 2;
e*=5;//这样返回的结果就是e=10
var f =2;
var g = f*5;//这样f的值它依旧还是2
自加、自减、自乘...的原理是:
自己和一个值进行运算,得到的结果,返回给自己
运算优先级
程序中运算优先级和“传统数学”中运算优先级是一样的:默认是先算乘除再算加减
强制优先:把要优先运算的内容,用“()”括号括起来行了
括号之间存在嵌套,会先算最底层的
如:((52-89)+500)*29
比较和逻辑运算符
> 大于
< 小于
= 赋值(把左边的内容赋值给右边的变量)
== 比较(判断2边的内容是否相等用的是==)
!(比较内容) 求非(求非得内容要括起来)
!= 不等于
>= 大于等于
<= 小于等于
成立就是返回为ture、不成立返回的就是false