キー・フレームの判断
キーフレームの有無やインデックス番号を調べる。
- エクスプレッションでキーフレームの有無やキーインデックスを使う場合には現在のタイムマーカーの位置とキーの関係を調べる必要があります。
- その要望に答えてくれるメソッドがnearestKey(t)です。
nearestKey(t)
- このメソッドは引数(t)に最も近いキーオブジェクトを返します。
- 引数が(time)の場合は現在のタイムマーカーに一番近いキーフレームの番号を取得することができます。
- 下図(24fps)では0frから12frまでは[ 1 ]を返し、それ以降は[ 2 ]を返します。

- つまりキーフレームとキーフレームの中央で値が切り替わります。
その時、キー・フレームはあるのか?
- nearestKey( ) のtimeとタイムマーカーの timeを比較して、2つが同じ値であればそこにキーフレームがあることがわかります。
- 下の式は"foo"というレイヤーの「位置」のキーフレームの有無を判断する例です。
nKey = thisComp.layer("foo").position.nearestKey(time);
if (time == nKey.time) {
//キーフレームがある場合の処理
}
前後のキー・フレームをGet
- タイムマーカーの前後のキー・フレームを取得するには大小を比較します。
- 現在のtimeとnearestKey( ) のtimeを比較して、タイムマーカーのtimeの方が大きければ前のキーで、小さければ次のキーです。
- 下の例では次のキーフレームになるまでは前のキーのインデックスが変数P1に入ります。
nKey = thisComp.layer("foo").position.nearestKey(time);
(time >= nKey.time ) ? P1 = nKey.index : P1=nKey.index-1
最後のキー・フレームをGet
- この例ではコンポの秒数を引数にして、「位置」プロパティの最後のキーを取得しています。
compDur=thisComp.duration;
position.nearestKey(compDur).index;
- 注意:コンポの秒数外にキーがある場合はそのキーを返す場合があります。
- 例:5:00のコンポで 5:02にキーがある。
例:次のキー・フレームの「位置」を指す矢印
- この例では矢印レイヤーの「回転」プロパティに次の式を記述しています。
nKey = position.nearestKey(time);
(time >= nKey.time) ? P1=nKey.index+1: P1=nKey.index;
target = position.key(P1).value - position;
angle = Math.atan2(target[1],target[0]);
radiansToDegrees(angle);
- 2行目までで次のキーフレームインデックスを取得
- 3行目で現在の位置から次のキーフレームの「位置」へのベクトルを取得
- 4行目でそのベクトルから角度(弧度)を算出
- 5行目で弧度を度数に変換しています。
- 3~5行目についてはatan2( )を参照して下さい。
逆正接
- 3~5行目についてはatan2( )を参照して下さい。

前のページへ