目錄 其他材料 |
向量、陣列、維數(shù)、索引 有時候你會發(fā)現(xiàn)通過拾取線創(chuàng)建的表達(dá)式看上去好象在重復(fù)參數(shù),例如,如果你將位置參數(shù)的拾取線拖動到旋轉(zhuǎn)參數(shù)上,你就會得到如下表式: [rotation, rotation]; 因?yàn)槲恢脤傩杂袃蓚參數(shù)(X、Y坐標(biāo))而旋轉(zhuǎn)屬性只有一個參數(shù),建立連接關(guān)系后,表達(dá)式自動將旋轉(zhuǎn)參數(shù)應(yīng)用兩次分別位置屬性的X、Y坐標(biāo)參數(shù)。 由兩個或三個數(shù)值來描述屬性的參數(shù)組叫做向量或陣列,AE中很多的屬性參數(shù)是向量式的,包括位置、軸心點(diǎn)和縮放等屬性; 陣列對應(yīng)的用單個數(shù)值來描述屬性的參數(shù)叫做標(biāo)量式參數(shù)。 向量與陣列 究竟向量和陣列之間有什么區(qū)別呢,你也許會注意到AE的幫助文件有時候互用這兩個單詞,簡單的說向量是既有大小又有方向的數(shù)字陣列,其運(yùn)算結(jié)果即要考慮到大小又要考慮到方向;陣列是一套獨(dú)立元素的組合,陣列中可以包含任何元素,可以是物體陣列,詞匯陣列或者是混合陣列: ralph=[10, this_layer, "bob"]; 也許沒有人會知道上面的這種陣列會有什么用處,但是它確實(shí)是一個正確的陣列,當(dāng)然在AE中我們大部分時間內(nèi)遇到的是數(shù)字陣列(也叫向量),因?yàn)槠渌愋偷年嚵性贏E中沒有用。所以,在接下來的描述中,當(dāng)談?wù)摰酵ㄓ玫母拍詈筒僮鲬?yīng)用時,我們使用陣列來描述;當(dāng)涉及到特殊的數(shù)字陣列時我們用向量來描述。 索引 對于陣列來說,你可以使用陣列名加上包含數(shù)字的中括號從陣列中提取需要的單一元素,例如: position[0]; 這種表達(dá)方法叫做索引,注意在陣列中使用索引調(diào)用元素時,必須從0開始計數(shù)第一個元素,也就是說,陣列中的第一個元素必須以陣列名加上[0]來表示, 第二個元素必須以陣列名加上[1]來表示,依次類推。 所以,上面的表達(dá)式就返回位置屬性向量中的第一個參數(shù)——x坐標(biāo),那么position[1]就返回位置屬性中的Y坐標(biāo),千萬不要搞混淆了,在AE中雖然所的調(diào)整都是從1開始的,但是當(dāng)使用索引時,必須從零開始計數(shù) 建立陣列 如果要建立陣列,可以將數(shù)值以逗號分隔開放入中括號中: my_vector=[10,20,30]; 該表達(dá)式的意思是將一個三維數(shù)組賦予變量my_vector,該數(shù)組中包含三個元素分別是10,20,30,. my_vector[1]; 該表達(dá)式計算得出的值是20(數(shù)組中的第二個元素)。 維數(shù) 陣列中的元素個數(shù)代表陣列的維數(shù),例如上面的my_vector是一個三維數(shù)組,位置屬性是一個二維數(shù)組或三維數(shù)組(轉(zhuǎn)變?yōu)槿S圖層)。標(biāo)量式的屬性如旋轉(zhuǎn)和不透明度屬于一維參數(shù)(準(zhǔn)確說單一數(shù)字或者是標(biāo)量數(shù)值就是一維向量)。 需要注意的是諸如位置屬性這樣的多維數(shù)組或者是自定義的數(shù)組變量,不需要將他們的名字寫在方括號中,AE會將其識別為數(shù)組。當(dāng)要索引陣列或者是描述陣列時,需要使用方括號。 修改陣列中的一個元素 可以用如下的方式來書寫位置表達(dá)式: [position[0], position[1]]; 將位置陣列中的兩個參數(shù)分別提出來后,再將他們放入同一個陣列中,看上去與僅僅書寫positon的結(jié)果相同,優(yōu)點(diǎn)是你可以使用這種結(jié)構(gòu)來修改陣列中的一個元素而不影響另外元素,例如: top_of_layer=0; 在這個表達(dá)式中,陣列中的第一個元素是軸心點(diǎn)的X坐標(biāo)值,第二個元素是0,如果將該值賦予軸心點(diǎn)屬性,那么軸心點(diǎn)的X值將受AE的控制調(diào)整,而軸心點(diǎn)的Y值將始終為0。 當(dāng)使用這種結(jié)構(gòu)時要特別注意,如果將圖層設(shè)置為3d圖層,就需要重新書寫表達(dá)式,將位置與軸心點(diǎn)Z軸考慮進(jìn)去。 例如,如果仍然使用上面軸心點(diǎn)的例子,但是這次將軸心點(diǎn)所在的圖層設(shè)置為3D圖層,AE會自動將丟失的Z軸坐標(biāo)設(shè)置為0,這當(dāng)然比出現(xiàn)程序錯誤要強(qiáng)的多,但是所得到的結(jié)果未必是我們需要的,因?yàn)楸磉_(dá)式將忽略軸心點(diǎn)的Z軸坐標(biāo)的變化。 再看另外一個例子,假如你將一個圖層的位置屬性復(fù)制到另外一個圖層上,并且將該參數(shù)的Y軸值減去100: ralph=this_comp.layer(1) 如果這時將圖層設(shè)置為3D圖層,你會發(fā)現(xiàn)對控制圖層的Z軸所做的任何操作絲毫不會影響到受控圖層的Z軸,因?yàn)楸磉_(dá)式中沒有表明Z軸的坐標(biāo)值,AE會自動將其設(shè)置為0。 陣列的重要性 為什么用如此大量的篇幅來描述陣列呢,因?yàn)樵谀闼鶗鴮懙谋磉_(dá)式中必須提供正確的參數(shù)維數(shù),例如僅僅給位置屬性提供一個參數(shù)就是錯誤的 position=6;? // ?? 不正確 這條語句就是錯誤的,因?yàn)槲恢脤傩灾辽傩枰獌蓚參數(shù): position=[320,240]; // 正確 順便提醒一句,你完全沒有必要寫成這種形式“position=”,因?yàn)樵跁鴮懕磉_(dá)式時就已經(jīng)將該值賦予了連接的屬性參數(shù)。 如果你所書寫的表達(dá)式存在錯誤,書寫完畢后AE會自動彈出一個錯誤對話框同時該表達(dá)式將被禁用。 如果要避免這種錯誤,你需要核實(shí)正確的參數(shù)維數(shù),, 可以通過AE自帶的幫助文檔或教程后面提供的參考表格來查閱表格. 同樣的如果在表達(dá)式中涉及到另外的參數(shù),你也需要在幫助文檔或者是下面的表格中查閱參數(shù)維數(shù),你需要調(diào)整來自這些參數(shù)的值以匹配你所需要的輸出維數(shù)。如果你引入了一個二維參數(shù)到一個一維數(shù)組中,你就需要調(diào)整維數(shù)以適應(yīng)輸出(如忽略二維數(shù)組中的一維元素)。 下面的表格中列出了AE中大部分屬性參數(shù)的維數(shù)以及這些參數(shù)值的范圍:
當(dāng)使用拾取線時,AE會自動通過索引向量(一維——二維)或重復(fù)標(biāo)量(二維——一維)的方式矯正維數(shù)的匹配。 |
所有內(nèi)容版權(quán)歸JJ Gifford.所有,翻譯權(quán)歸CG頻道所有,違者必糾。