AE表達式一直是大家學習AE過程中的一道坎,涉及代碼網上教程資源又不多,于是很多人都沒有完全地領略到AE表達式的魅力。這幾天我一直想寫一篇《AE表達式江湖文檔》。這篇文檔的目的不在于全面地介紹表達式,那是官方文檔才做的事情。我的目的在于嘗試用直白的語言和例子闡述表達式,讓不懂代碼的人讀完后也能看得懂AE表達式,會寫AE表達式。
一直以來,大多數人都不想去碰AE的表達式,覺得和編程掛鉤的東西都很難。于是我嘗試著去思考怎么簡單地做AE表達式的教程,讓大部分人能接受。
于是,這篇非官方的來自江湖的AE表達式文檔就出爐了。
江湖就有江湖的規矩。
不拘小節不刻板,不可能像官方文檔一樣每個函數都單獨拿出來講,官方文檔是讓人們當做字典查找的,我們只講有用的,講少一點,講簡單一點。
本文的目的不在于全面,在于力爭各位讀完之后,看得懂AE表達式,會寫AE表達式!
表達式基礎
1、如何添加表達式
再深厚的功夫也是從扎馬步開始的。如何添加表達式呢?兩個動作。
①按住[Alt鍵],②點擊你要添加表達式的屬性前面的[秒表]。
這個時候就會出現一個編輯框,把表達式寫進去就可以啦。
示例:用表達式讓[ball]的位置固定在[200, 200]處。
2、表達式開關
這個開關是[開啟/關閉]表達式,可以令你在不清除表達式框的情況下,禁用表達式。
示例:表達式的開啟和禁用
3、表達式拾取器
它在民間有多個名字,飄忽不定,有人說是拾取器,有人說是關聯器,有人說是橡皮筋。
打個比方,你在寫一篇叫做《我的同學》的作文,你的同學名字叫做沃爾塔·薩斯皮諾斯·阿卡貝斯基,你記不住,于是你用手指一指你的同學,他的名字就自動出現在你寫的文章里面,多方便呀,多偉大的手指呀。表達式拾取器就是這只神奇的手指。
示例:用表達式讓[ball]圖層的位置位于[anotherBall]的下面50px處
4、函數菜單
AE有很多已經內置的函數給你用,你并不需要記住它們每個的名字和參數,只需要記住有這么一個函數存在就可以,需要用的時候可以在這個菜單里面搜索你想要的函數。
表達式的規則
AE表達式的規則,等同于我們平日說話的時候主謂賓等語法規定,我們需要遵守,AE和你才能正常愉快地交流啊。
規則一:它要啥你就給它啥
無論你表達式寫得多么長多復雜,前面一大堆,都是為了計算出最后那個AE所要求的格式的東西。
[位置]:我要的是一個格式為[x, y]的東西,我好知道我在哪個地方。
[不透明度]:我只要一個數值就可以了,比如0,比如50,比如100。
[填充顏色]:我需要一個格式為[r, g, b, alpha]的東西,我好知道我是個啥顏色。
【示例】:
規則二:基本的計算
加減乘除就不用說了,在這里提一個常用的[取余數]的符號——%。
比如:a = 100 % 3;
那么a的值就是1。
【示例】:
注:[time] 是AE提供的,表示當前的時間。例如1s時,time = 1;2.5s時,time = 2.5。我們經常利用[time]的值跟隨時間變化這個特性來制作動畫。
規則三:變量
不要覺得[變量]這個詞很陌生可怕,其實,初中開始我們的數學引入的字母,可以說就是[變量],它的作用就是來存儲數值的。
【示例】:
注:[time] 是AE提供的,表示當前的時間。最后一個示例中的”time % 1”,表示當前時間對1取余數。例如time = 1.5s處,time % 1 = 0.5。因此,(time % 1) 隨著時間在0~1之間不斷變化。
規則四:語句
表達式是由一行一行的語句構成的,每個語句以一個分號結尾,當然AE表達式允許你忽略分號,不過在每個語句后面添加分號,是一個好的習慣。
規則五:注釋
先看看下面兩個表達式:
上面那個可能你一開始看到,一時半會不知道它是用來做什么的。
但是下面那個表達式,添加了作者的注釋,一目了然!
有兩種注釋的方法:
單行注釋:兩個斜杠 // 可以注釋掉同一行后面的所有內容。
多行注釋:可以用 /* 和 */ 把要注釋的內容括起來,這種方式可以注釋多行內容。
話說回來,注釋可以解釋代碼的作用,增加可讀性,同時它不會被運行,直接被AE忽略掉。簡單來說,表達式是寫給AE看的,注釋是寫給人看的。
【示例】:
規則六:類型
在AE表達式中,變量a常見的類型有
數值。例如數字1、1.5、-10。
字符串。用引號包括起來,例如一個字符串”哈嘍你好呀”、”我在寫文檔ing” 。
布爾值。判斷對錯的布爾類型 true 和 false 。
數組。由許多元素組成的一個組。
規則七:條件
條件語句的結構其實很簡單,總結來說就是:
注意:
一個if后面可以跟著無數個else if,但是只能跟著一個else,且必須在最后面。
{} 花括號后面不需要加分號。
if 和else if后面的括號里是判斷的條件,常見的判斷有以下:
1、a == 1 (判斷a的值是不是等于1,切記是兩個等于號)
2、a >= b (判斷a的值是不是大于等于b)
3、 !(3 > 1) (!表示取反,因為3>1是true,所以取反之后這個條件是false)
4、flag (判斷flag是布爾值true還是false)
5、0 (當判斷條件是0,則表示false,若是0以外的其他數字,則表示true)
【示例】:
規則八:循環
個人感覺:循環在AE表達式里面的使用其實還挺少見的(所以循環的例子好難想呀) 。
循環有三種形式,你可以根據具體情況選擇任意一種。
舉個例子我們看看怎么使用。
注:在循環塊里面添加”break;“,表示跳出(打破)這個循環,不管循環條件滿不滿足,都跳出循環。
和 “break;” 類似的還有一個 “continue;” ,它表示結束本次循環,進行下次循環,而不是跳出(打破)循環。
規則九:函數
1、內置函數:
還記得那個函數菜單嗎?在里面我們可以看到很多AE提供給我們使用的函數。
例如:
a、wiggle(freq, amp); // [擺動]函數,freg是頻率,amp是幅度
b、random(min, max); // [隨機]函數,在min和max值之間取一個隨機值 (更多內置常用的函數將在第四節講解)
2、自定義函數:
個人感覺:在AE表達式中自定義函數還是比較少見的。
函數的定義格式如下:
在這里我們簡單地舉一個例子:
注:因為random()返回的是一個小數,所以我們自己寫了一個getRandomInt(min, max)函數來返回一個隨機的整數。
規則十:那些特殊的規則
1、a = a + 1; 這個語句我們可以簡寫為 a++;
2、同理,a = a – 1; 我們可以簡寫為 a–;
3、條件語句還有一種寫法:condition ? do somthing : or do something;
這是在 if 和 else 都只有一個語句的時候可以采取的簡寫方式。
舉例: 2 < 3 ? a = 1 : a = 0; // a的值為1
一般我們寫成 a = 2 < 3 ? 1 : 0; // a的值為1
注:想完整地學習語法規則可以去runoob.com或者w3school.com.cn搜javascript的教程看。
歡迎關注作者微信公眾號:壞打印機