前回の第3回「変数を使う」では,任意の値がメモリできる変数を使って,スクリプトを作成した。今回のテーマは「パーツ化」だ。Flashでは,グラフィックなどのビジュアルエレメントは,シンボルに変換することで使い回しの利くパーツになる。まとまったスクリプトを簡単に何度でも実行できるようにするためには,その処理を関数として定義すればよい。
時計のシンボルを作成する
前回作成した時計の秒針と分針を,ひとつのパーツにしていこう。まず,ビジュアルエレメントの秒針と分針を,シンボルとしてまとめる。秒針と分針のインスタンス(名前はそれぞれsecond_mcとminute_mc)をともに選択して,コンテキストメニューから[シンボルに変換](ショートカットキー [F8])する(図1)。
シンボルに変換したムービークリップのインスタンス名は, clock_mcとしておこう。これでメインタイムラインにはインスタンスclock_mcがあり,その中に入れ子で秒針のsecond_mcと分針のminute_mcが配置された状態になった。すると,メインタイムラインのフレームアクション(第2回「変数を使う」のスクリプト2)は,インスタンスのターゲットパスが変わったために動かなくなる。
そこでつぎに,スクリプトを修正しなければならない。修正方法としては,第1にターゲットパスを書替えることが考えられる。スクリプトを記述しているメインタイムラインからの秒針・分針のターゲットパスは,それぞれ clock_mc.second_mcとclock_mc.minute_mcにすればよい(図2)。
しかし,メインタイムラインのフレームアクションは,時計のシンボルの外に記述されている。したがって,他のムービーにこのムービークリップシンボルのインスタンスを配置したとき,時計としてアニメーションさせるには,インスタンスの置かれたタイムラインにこのフレームアクションを毎回コピーしなければならない。
パーツ化を目指す今回は,スクリプトの第2の修正方法として,このフレームアクションを時計のムービークリップシンボルの第1フレームに移行する(図3)。この場合,時計のシンボル内に秒針・分針のインスタンスが存在するので,ターゲットパスは変更の必要がない。
ただし,このフレームアクションのままでは,時計のムービークリップインスタンスが表示されるときに1度しかスクリプトは実行されない(※1)。そこで,この処理を関数として定義すれば,何度でも繰返し実行することが可能になる。
- ※1
- メインタイムラインで処理を繰返し実行したのと同じように,時計のムービークリップシンボルのタイムラインを2フレームに拡張することも考えられる。しかし今回は,後々の展開や拡張性を考えて,ムービークリップシンボルは1フレームのみの構成とする。
関数の定義と実行
関数を使うためには,(1)定義と(2)実行のふたつのステップが必要だ。関数の「定義」は,関数というかたちで,処理内容をタイムラインにメモリする操作である。関数の「実行」は,そのメモリした内容を取出して,処理を行うことだ。関数の実行は,「呼出し」ともいわれる。1度定義してメモリした関数は,いつでも何度でも呼出して実行することができる(※2)。
このふたつのステップは,ネットで音楽を入手して聴く場合と似ている(表1)。関数の定義は,音楽データをネットからダウンロードする手順に相当する。音楽データはディスクに記録するのに対して,関数はRAMにメモリするという違いがあるだけだ。このステップは,再生(音楽)あるいは呼出し(関数)の前にやっておかなければならい。ただし,内容に変更がないかぎり,1度だけ行えば足りる。
いったんダウンロード(音楽)や定義(関数)が済めば,あとはいつでも好きなときに,何度でもディスクあるいはメモリから再生または呼出しすることが可能になる。
表1 関数とネットの音楽を比較
| ステップ | 関数(function) | ネットの音楽 | 実行時期 |
|---|---|---|---|
| 1 | 定義 | ダウンロード | 最初に1回 |
| 2 | 実行(呼出し) | 再生 | ステップ1の後なら,いつでも何度でも |
- ※2
- スクリプトで定義した関数は,ActionScriptに定義済みの関数・メソッドと同じように呼出すことができる。このようなユーザーが定義して加える関数を「ユーザー定義関数」と呼ぶ。

