教程的視頻內(nèi)容為在線學(xué)習(xí)網(wǎng)站【沃CG】的付費(fèi)內(nèi)容,這是我在學(xué)習(xí)過程中做的筆記
@toc
第1章: 課程介紹
課程介紹
ae腳本可以代替重復(fù)性的人工操作和復(fù)雜的數(shù)學(xué)計算孽拷,設(shè)計師能有更多的時間專注于視覺表現(xiàn)上
編寫ae腳本的門檻:編程能力泳秀、英語能力
- 第一天:ae表達(dá)式和腳本谊娇、插件的區(qū)別开财;JavaScript基礎(chǔ)(數(shù)據(jù)類型司光、變量)
- 第二天:編程語言流程控制的部分(判斷此衅、循環(huán)强戴、函數(shù))、面向?qū)ο?/li>
- 第三天:ae的各個接口挡鞍、用腳本控制合成骑歹、圖層的屬性
- 第四天:添加關(guān)鍵幀、腳本界面的編寫
- 第五天:綜合腳本的開發(fā)案例
第2章: 腳本基礎(chǔ)
ae表達(dá)式墨微、腳本道媚、插件的區(qū)別
-
表達(dá)式
表達(dá)式加在屬性上(為屬性賦值)、表達(dá)式每一幀都會運(yùn)算一遍
比如:wiggle(1,20)
-
腳本
腳本使用JavaScript編寫翘县,腳本語言不需要編譯最域,腳本語言是執(zhí)行性的語言
ae首選項(xiàng),要啟用這兩項(xiàng)
allow scripts to write files and access network(允許腳本訪問網(wǎng)絡(luò))
enable JavaScript debugger(啟用JavaScript 調(diào)試器) -
插件
插件使用C锈麸、C++編寫
插件分為:特效插件镀脂、文件導(dǎo)入導(dǎo)出插件、通用插件忘伞、渲染引擎插件
通用插件:它在ae其他的菜單欄中出現(xiàn)薄翅,有自己的獨(dú)立界面,如ae的二維動力學(xué)插件“牛頓”
第3章: ExtendScript Toolkit軟件介紹
EXTK軟件介紹
ExtendScript是用JavaScript拓展出來的氓奈,他們的基礎(chǔ)語法是一樣的
軟件界面
切換腳本在那個軟件里運(yùn)行
運(yùn)行在“主空間
運(yùn)行匿刮、暫定、停止探颈、后面三個是在debug時用到
debug :排除錯誤
JavaScript console(JavaScript控制臺):輸出腳本運(yùn)行數(shù)據(jù)
undefined未定義的
data browser:用于瀏覽數(shù)據(jù)
function:定義的函數(shù)在這個面板顯示出來
breakpoints:打的斷點(diǎn)在這個面板顯示
call stack:當(dāng)函數(shù)存在嵌套關(guān)系時熟丸,一個函數(shù)調(diào)調(diào)用了另一個函數(shù),這個面板告訴你代碼運(yùn)行的路線是怎么樣的
scripts:列出軟件現(xiàn)有的腳本
菜單欄help:中有一些文檔
《adobe intro to scripting》:adobe腳本編寫的介紹
《javascript tools guide cc》:adobe腳本編寫中可以操作的通用功能(文件的寫入伪节、窗口界面UI光羞、adobe軟件之間的交互、訪問網(wǎng)絡(luò)怀大、C纱兑、C++寫的庫、訪問XML文件化借、訪問XMP文件)
xml用來存配置文件
xmp潜慎,比如給視頻加一個頭文件,注釋等…
設(shè)置字體
edit>preference>fonts and colors
節(jié)子老師推薦使用:consolas
alert(“hello world”);//alert 用于彈出一個提示框
第4章: AE基礎(chǔ)
通過這個小案例:在ae中創(chuàng)建一個合成铐炫、在這個合成中新建一個固態(tài)層垒手,并畫一個mask
簡單了解一下腳本是如何來控制ae里的元素
這些“元素”在JS中都被稱之為“對象”
//標(biāo)注版
app.beginUndoGroup("創(chuàng)建一個合成、固態(tài)層畫一個mask");//回退組倒信,ctrl+z撤銷時科贬,會撤銷這整個組的內(nèi)容
var comp = app.project.items.addComp("合成1",1920,1080,1.0,30.0,24);
//("合成名字"、寬度鳖悠、高度榜掌、像素寬高比、持續(xù)時間乘综、幀數(shù)率)
var layer = comp.layers.addSolid([1,1,1],"固態(tài)層",1280,720,1);
//255=1 0-255 就是0-1
//(顏色憎账、固態(tài)層名字、寬度卡辰、高度鼠哥、像素寬高比、持續(xù)時間)
var mask = layer.Masks.addProperty("Mask");//給layer加一個mask
//mask看政、特效的性質(zhì) 都是一個Property(屬性)
var maskShape= mask.property("maskShape");//獲取maskpath屬性
var maskShapeValue = maskShape.value//獲取值
maskShapeValue.vertices = [[100,100],[800,100],[800,440],[100,400]]
//設(shè)置新的值
maskShape.setValue(maskShapeValue);//為新的值生效
app.endUndoGroup();
//無標(biāo)注版
app.beginUndoGroup("創(chuàng)建一個合成朴恳、固態(tài)層畫一個mask");
var comp = app.project.items.addComp("合成1",1920,1080,1.0,30.0,24);
var layer = comp.layers.addSolid([1,1,1],"固態(tài)層",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章: 程序語言基礎(chǔ)
變量
“變量”是用來存“數(shù)據(jù)”的容器
- 使用方法:var 變量名 = 數(shù)據(jù)內(nèi)容
var (定義變量的方法)、后面接 “變量名”允蚣、“=”于颖、“數(shù)據(jù)內(nèi)容”
"=" 為變量賦值(可以先聲明變量,在用到這個變量時嚷兔,再給它賦值也可以)
如var a,b,c,d,e,f,g
a=1,b=2,c=3
"數(shù)據(jù)內(nèi)容"它可以是數(shù)字森渐、字符串、布爾值....
- 變量名
- 變量名不能是特殊字符(如:中文冒晰、特殊符號)
- 變量開頭字符不能是數(shù)字
- 變量名是唯一性的
var my_comp;//這種方法比駝峰命名看起來更舒服一些
var myComp同衣;//駝峰命名法
編寫代碼的一些習(xí)慣
// 雙引號 后面的內(nèi)容為備注,它不會運(yùn)行(這一點(diǎn)對初學(xué)者很重要)
養(yǎng)成良好的習(xí)慣壶运,在每一行的代碼結(jié)束的位置輸入一個“耐齐;”分號
輸入子層級代碼時,要相對父代碼蒋情,留出一個“tab”的縮進(jìn)埠况,這樣的代碼看起更友好
數(shù)據(jù)類型
-
字符串
"你好","5"
可以使用雙引號、或單引號
-
整數(shù)
0,1,3, 4 ,5 -
浮點(diǎn)數(shù)
0.5,8.85,0.001 -
布爾值boolean
true,false
true 表示:是棵癣、1辕翰、啟用
false 表示:不是、0狈谊、不啟用
-
對象object
很多數(shù)據(jù)的一個組合 - 未定義undefined
-
空值null
能用整數(shù)就不要用浮點(diǎn)數(shù)
一定要用浮點(diǎn)數(shù)的時候喜命,可以在數(shù)字后面加一個.f
如:30.f
它表示的就是一個浮點(diǎn)數(shù)
字符串的方法
更全面的有關(guān)字符串的方法請訪問:https://www.cnblogs.com/imguo/p/5768717.html
var i = "abcdefjhljklmn"
alert(i.length()); //.length() //可以求出當(dāng)前字符串的長度
alert(i.charAt(3)); //編程中第一位是0沟沙、這里的3就是第四位“d”
//.charAt()//查看某個位置的字符是什么內(nèi)容
alert(i.slice(0, 10)); //切塊的作用 這里的i.slice(0,10) 表示的就是保留第一位到第十一位中間的字符
alert(i.slice(0, -1)); //保留全部字符
alert(i.toUpperCase()); //把內(nèi)容全部轉(zhuǎn)為大寫
alert(i.toLowerCase()); //把內(nèi)容全部轉(zhuǎn)為小寫
數(shù)據(jù)類型的轉(zhuǎn)換
轉(zhuǎn)換為整數(shù)
parseInt(texe,base)
parseInt("3");
parseInt(3.1415926);//它會直接去掉小數(shù)部分
texe接收字符串(字符串內(nèi)容為數(shù)字)或數(shù)字壁榕,字符串的內(nèi)容必須是數(shù)字
默認(rèn)base就是10矛紫,一般不用管
轉(zhuǎn)換為浮點(diǎn)數(shù)
parseFloat(texe,base)
如:alert(parseFloat("3")+1.5);
NaN 表示轉(zhuǎn)化出錯
轉(zhuǎn)換為字符串
toString();
如:toString(5400215); //它得到的結(jié)果就是"5400215"
運(yùn)算符
數(shù)字之間的運(yùn)算
var a = 123+321;//加
var b = 12-321;//減
var c = 123*321;//乘
var d = 123/321;//除
var e = 123%321;//求模
//求模指的是:a除b除不盡护桦,第一次留下的余數(shù)含衔、求模運(yùn)算常用來判斷數(shù)值是“奇數(shù)”還是“偶數(shù)”
字符串的運(yùn)算
var i = “我不知道”+“你的名字”;//得到的結(jié)果就是:“我不知道你的名字”
自加和自減
var a = 5;
a++;
//++的意思:就是自加1(自己+自己得到的結(jié)果)
//這里的a++ 就是a=6
var b = 5;
b--;
//--的意思:就是自減1(自己-自己得到的結(jié)果)
//這里的b-- 就是b=4
var c = 5;
c+=4;
//+=的意思:就是自加一個數(shù)(自己加一個數(shù)煎娇,然后得到的一個結(jié)果)
//這里的c+=4 就是 c=9
var d = 5;
d-=4;
//-=的意思:就是自加一個數(shù)(自己減一個數(shù)二庵,然后得到的一個結(jié)果)
//這里的d-=4 就是 c=1
//同樣的這種方法適用于“自乘”、“自除”
var e = 2;
e*=5;//這樣返回的結(jié)果就是e=10
var f =2;
var g = f*5缓呛;//這樣f的值它依舊還是2
自加催享、自減、自乘...的原理是:
自己和一個值進(jìn)行運(yùn)算哟绊,得到的結(jié)果因妙,返回給自己
運(yùn)算優(yōu)先級
程序中運(yùn)算優(yōu)先級和“傳統(tǒng)數(shù)學(xué)”中運(yùn)算優(yōu)先級是一樣的:默認(rèn)是先算乘除再算加減
強(qiáng)制優(yōu)先:把要優(yōu)先運(yùn)算的內(nèi)容,用“()”括號括起來行了
括號之間存在嵌套票髓,會先算最底層的
如:((52-89)+500)*29
比較和邏輯運(yùn)算符
> 大于
< 小于
= 賦值(把左邊的內(nèi)容賦值給右邊的變量)
== 比較(判斷2邊的內(nèi)容是否相等用的是==)
!(比較內(nèi)容) 求非(求非得內(nèi)容要括起來)
!= 不等于
>= 大于等于
<= 小于等于
成立就是返回為ture攀涵、不成立返回的就是false