エクスプレッション 〜Modulo operatorを使って点滅〜

Modulo operator=モジュロ演算、簡単に言うと「余り」。
割り算での「余り」のことです。


一時停止を示す赤信号の点滅とか、道路の中央分離帯に置かれてる黄色点滅のライトとか、そういうイメージ。

とりあえず1秒間隔の点滅を↓こんな感じに作ってみた↓

1秒=29.97フレームの設定で、
0;00〜0;29:点灯
1;00〜1;29:消灯
2;00〜2;29:点灯
3;00〜3;29:消灯
…以下繰り返し。

作り方は、点滅させたいオブジェクトを配置して、そのオブジェクトの「トランスフォーム→不透明度」を「Alt + クリック」して、以下のエクスプレッションを記述するだけ。

var second=Math.floor(time);
if (second % 2==0) 100 else 0

以下の例だと、シェイプレイヤーで黄色の円を描いて、その「不透明度」に上記エクスプレッションを記述しました。
20120728_2

var second=Math.floor(time);
if (second % 2==0) 100 else 0

の意味だけれど、

1行目は、変数に小数点の無い時間を使うこと。なお、
Math.floor() :切り捨て(例:3.7→3、9.1→9、80.9999→80)
Math.ceil():切り上げ(例:3.7→4、9.1→10、80.9999→81)
Math.round():四捨五入(例:3.7→4、9.1→9、80.9999→81)

2行目は、「秒数÷2の余りが0の時、不透明度は100。それ以外の時は0」という命令。
%:modulo(割り算した余りを出す)
==:イコール

この2行を合わせると、
0秒÷2:余り0→不透明度100→点灯
1秒÷2:余り1→不透明度0→消灯
2秒÷2:余り0→不透明度100→点灯
3秒÷2:余り1→不透明度0→消灯
となる。

エクスプレッション実行後のグラフはこのようになっている。
20120728_3

この点滅するオブジェクトを2つ使用して、交互に点滅するのも作ってみた。

var second=Math.floor(time);
if (second % 2==0) 100 else 0

の、「100 else 0」を逆にするだけなので、
どんなふうにしたのか予想はつくと思うけど、いちおう貼っときます。
20120728_5

「1秒間隔だけなのか? もっと速くとか遅くとかできないのかよ!」を思ったのは当然ですが、
いい方法が思いつかない。

プリコンポーズしてタイムリマップぐらいかな?
「%2」以外にも「%7」にして七色の点滅とか、なんか使えるかな?
でもしかし、ふつうにアニメーションプリセットやエフェクトに同じ機能があったら、ちょっとショックだわ。

というわけで、Modulo operatorでした。


コメントを残す

メールアドレスが公開されることはありません。