格子の中を正方形が1秒ごとにランダムな場所に移動する その3

その2で読み込む素材を作ったので、あとはAE上での作業です。
エクスプレッションは以下を使います。

random()
posterizeTime(framesPerSconde)
Math.floor(value)

あ、全部エクスプレッション言語メニューにあるものばかりだ。(^^)
取っ付きにくいと思ってたけど、基本的なものはあそこに入ってたのね…


まず、AEのコンポジションは20秒(29.97fps)にしました。
サイズは1280×720 px。

任意の平面レイヤーを下に、格子模様を上に、
そして真ん中に、正方形を配置します。
正方形の位置は(20,20)。
20121010_1

見ての通り、正方形は一辺が40px、格子も一区画が40px。
というわけで、現在位置(20,20)からx方向/y方向とも40 pxづつ動けば格子内に収まります。
20121010_2

そこで、そうなるように考えて考えたエクスプレッションが以下の通り:
x=transform.position[0]+40*random(31);
y=transform.position[1]+40*random(17);
[x,y]

random(数値)は「0〜数値」の間でランダムな数値をとります。
たとえば、random(31)は0〜31の間の任意の数値になります。
上のエクスプレッションだと、xは最大31、yは最大17なので、最も大きな数値でも

x=20+40×31→1260
y=20+40×17→700

となり、一番右下の格子に収まります。
そこで、正方形の位置プロパティにこのエクスプレッションを書きます。
20121010_3

そして、正方形を動かすと、こうなりました。

速えぇ… (´△`)
しかも、止めてみると、格子に収まってないし。
20121010_5

格子に収まっていない。
のと、なんとかしましょう。

random(数値)では、整数以外(23.4とか)もとるので、これを整数にしたい。
そこで使用するのがMath.floor(切り捨て)です。
で、このように書き換えました。

x=transform.position[0]+40*Math.floor(random(31));
y=transform.position[1]+40*Math.floor(random(17));
[x,y]

20121010_6

今度はどうでしょう??

速いのは相変わらずですが、止めてみると、格子の中に収まってます。
では、スピードを落とすために、posterizeTime(数値)を加えます。

posterizeTime(数値)は、スローモーション(速くもできるが)のコマンド。
(1)だと1秒間に1回、(3)だと、1秒間に3回動くようになります。
(0.5)だと1秒間に0.5回、つまり2秒間に1回ですね。
それでは、以下のように書き換えます。

posterizeTime(1);
x=transform.position[0]+40*Math.floor(random(31));
y=transform.position[1]+40*Math.floor(random(17));
[x,y]

20121010_8

これで、↓のように思い通りの動きになりました。

そして、仕上げは残りの正方形(黄色、灰色、水色)を(20,20)に配置して、同じエクスプレッションを適用するだけです。
20121010_10

私はイラレで4色準備したけど、AEのエフェクト、
●エフェクト→色調補正→色調/彩度

でも色は変えられるから、一色だけ用意しても良いような気が… いやそっちのほうが楽だった!
以上で、突っ込みどころも多いですけど、「格子の中を正方形が1秒ごとにランダムな場所に移動する」完結です。random()は理解しやすくて、いろいろ試してみたいなと思えました。とくにサウンドインジケーターなんて、こっちのほうが自由に作れそうだし。

今回のエクスプレッションは先人からのパクリではなく、初めて自分の頭で考えたものなので、変なところあるかもしれないです。そこんところをご留意くださいませ。┌|-.-|┐
でも、不器用でも自分で考えて作るのは面白いです。


コメントを残す

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