前回の第4回「関数を使ってパーツ化する」では,まとまった処理を関数として定義し,いつでも何度でも呼出せるようにした。今回は,「イベントリスナー」について学習する。関数をイベントリスナーとして登録することにより,指定したイベントが発生したときに,その関数が呼出されるようにしてみたい。
イベントとは
FlashのActionScriptは,イベントをベースにして処理が構成される。イベントというのは,ユーザーのマウスクリックやキーボード入力のようなインタラクションから,外部データの読込みや,ディスプレイの描画更新のようなシステムの処理まで,さまざまな事象・状態の変化にともなって発せられるFlash Playerからの信号である。
その信号を検知することにより,ユーザーがクリックしたとか入力したとか,あるいは外部データの読込みが終わった,画面がリフレッシュされたといった事象の瞬間を捉え,必要な処理を実行することができる。
イベントを受取ってスクリプトで処理をするには,Flash Playerがイベントを伝える相手つまりターゲットと,イベントの種類を知らなければならない。ただ,この段階では,ターゲットとしてはまずムービークリップを扱い,イベントもその都度ひとつひとつ覚えていけばよい。学習が進むにつれ,イベントの体系やその調べ方も徐々に身についていくだろう。
表1 ムービークリップが受取るイベントの例
| イベント | 発生時期 |
|---|---|
| click | ユーザーがインスタンスをマウスでクリックしたとき |
| keyDown | ユーザーがキーボードのキーを押したとき |
| enterFrame | 画面の描画が更新されるとき |
今回は,前回つくった時計のアニメーションの続きを,イベントを使って作成する(図1,※1)。アニメーションは,画面の描画が更新されるたびに,ステージ上のイメージを変化させる処理だ。したがって,利用するイベントはenterFrameになる(表1)。描画更新の頻度は,フレームレートに依存する。デフォルトの12fpsなら,スクリーンは1/12秒ごとにリフレッシュされることになる。したがって,このイベントも同じ1/12秒間隔で発生する。
- ※1
- 前回のサンプルファイルは,第4回「関数を使ってパーツ化する」の2ページ目からダウンロードできる。
イベントとイベントリスナー
ActionScript 3.0では,イベントリスナーという仕組みによってイベントを扱う。まず第1に,イベント発生時に行いたい処理を,関数として定義する。そして第2に,イベントを受取るターゲットとなるインスタンスに,その関数を登録する。すると,イベントが発生したときに,その関数が呼出されることになる。
- イベントリスナーを使った処理の書き方
- リスナー関数の定義
- ターゲットインスタンスにイベントリスナーとして登録
ターゲットのインスタンスに登録された関数は,イベントの発生を検知(listen)して呼出される。そのため,「イベントリスナー」とか「リスナー関数」と呼ばれる。前回作成した時計のムービーでは,すでにアニメーションの処理が関数として定義してある(図2)。これは,ほぼそのままリスナー関数として用いることができる。
他方,メインタイムラインのフレームアクションに記述した,関数の呼出しは要らなくなる。イベントリスナーとして登録すれば,リスナー関数は自動的に呼出されるからである。また,関数の呼出しが不要になれば,それを繰返し実行するためのフレームループも必要ないので,メインタイムラインは1フレームで足りる(図3)。


