AfterEffects 5.0からJavaScriptをベースにしたExpression(エクスプレッション)が搭載されています。JavaScriptはInternet ExplorerやNetscape Navigator、Adobe Acrobat、Macromedia Flash 5などいくつかのブラウザ/アプリケーションに搭載されています。付属マニュアル(P315)に、よればJavaScript 1.2をベースにしているようです。 JavaScriptはECMA Scriptを基準にしており、ECMAのサイトにPDF書類で用意されています。(ECMA-262,ECMA-290) 私のサイトにもJavaScriptのページを用意してありますので参考にしてください。基本的な命令はExpressionでも利用することができます。while, for, if, newなど基本的なものは問題なく利用でき文法も同じです。 しかし、やはりブラウザ上で動作するJavaScriptとExpressionは異なり、間違って命令を入力してしまったり、シンプルな数回の繰り返しでも10分以上全く反応しなくなることがあります。Adobe Systemsによればハングアップしているわけでなく10分ほど経過すれば戻ってくるとの事ですが、さすがに10分も待つというのは考えてしまいます。例えば while(1); と入力してしまうとハングアップ状態になります。同様に for(;;) も同様です。上記2つは故意にやらない限り大丈夫ですが、while(a == 9)のように式を記述した場合、間違って(運悪く)式の値が真(true)のままだと、やはりハングアップ状態になってしまいます。このような事からすればwhile, forなど繰り返し処理命令は気を付けて使う必要があります。 Expressionでは最後の値がプロパティに代入されます。この値の型とプロパティの型が一致しないとAfter Effectsが警告を表示しExpressionが無効になります。例えば不透明度の場合、値は1つだけ(一次元)あればよいので 50; とだけ入力してやれば不透明度が50%になります。これに対して座標値はX,Yの2つの値が必要です。X座標を20, Y座標を60にするには [20,60]; のように[]で括って配列として返すようにします。色の場合はRGBαの4つの値を返す必要があるので [0,0,1,0]; のように指定します。直接数値を指定するのでなく変数や式を指定することもできます。例えば変数yに20を入れ以下のように指定するとX座標が0、Y座標が20に設定されます。 y = 20; [0,y]; Expressionにはtimeプロパティがあり、これを利用することで時間ごとに座標を変化させたりすることができます。timeプロパティの値は「秒」で返されます。0.5秒なら0.5、1秒なら1、10秒なら10を返します。時間が進行するたびにX座標が増えていくようにするのであれば [time,0]; のようにします。これだと1秒で1ピクセルしか移動しませんので、もっと速く移動させたい場合は乗算記号をつかいます。 [time*10,0]; のように指定すると10倍速く移動します。演算記号は+-*/の四則演算が使え、%の剰余(わり算の余り)などJavaScriptで利用可能なものは大丈夫なようです。 色の値の範囲は0〜255ではなく0〜1となっています。これに注意すればランダムに色を変化させたりすることも簡単にできます。 複雑な計算や他のプロジェクトで同じExpressionを利用したい場合は、関数にしておけば簡単に使い回すことができます。関数を定義するにはfunctionを使います。例えばsetYという名前の関数を定義するには function setY(n) { a = (time*n) + 100; if (a == 0) return -100; else return 100; } のように記述します。これもJavaScriptの関数定義と全く同じです。利用する場合は setY(10); とすれば関数が呼び出され処理が行われます。代入するプロパティの型に注意すれば応用が利くでしょう。 Expressionでは他のレイヤー(親レイヤー、子レイヤーに限らず)も操作することができます。これにより、より複雑な動き、今までは面倒だった動きが簡単に記述できます。(ものによりますが) 都合がいいのはキーフレームの方がやりやすい場合はキーフレームで、計算でやった方が早い場合は計算(Expression)で、と切り分けることができる点でしょう。このAfterEffects Expression例文辞典では、いくつかのExpressionサンプルを用意してありますので参考にしてください。多分AfterrEffectsで、できる世界が広がるのではないかと思います。 << 戻る |