イベント処理とは
ActionScriptを使ってFlashムービーを作成されている方の多くは「どこかを『クリックしたら』動く」,「『○○秒毎に』アニメーションする」のように,「○○したタイミングで××する」ムービーの作成を考えているのではないでしょうか。例えば図1は,フレームレートに合わせたタイミングでインスタンスの位置を移動し,アニメーションをするムービーです。
図1●イベント処理を使ったムービー(クリックすると別ウィンドウでムービーを表示します)
このような「○○が起きた時」に「××な処理を実行」するプログラムを作成するための便利な仕組みが,今回ご紹介する「イベント処理」です。
イベント処理の基本
「イベント処理」は「イベント」が起きた時に任意の「処理」を行う仕組みです。ここでいう「イベント」とは,「ボタンを押した」「マウスを移動した」「キーを押した」「1秒経過した」「音楽を演奏し終えた」「読み込みが完了した」などの何らかの事象の発生を指します。そして,イベント発生時に実行する「処理」は,前回学んだ「関数」のことです。つまり,イベント処理とは,「何らかのイベントが発生時に,任意の関数を実行する仕組み」なのです。関数の作成方法は前回学習しましたので,あとは,イベントが発生したことを知る仕組みを学習すれば良いわけですね。
イベントが発生したことを知るには
さて,ここで「イベント」というものを知る方法を,私たちの普段の生活をヒントにして考えてみましょう。通常,私たちの身の回りでは,「目が覚めた」「歯を磨いた」「ご飯を食べた」というような「事象の発生」,言いかえると「イベントの発生」を知るには,どうすれば良いでしょうか?具体的な例で考えてみましょう。あなたは父・母・大学生の兄・高校生の妹の4人家族のお母さんだとします。あなたは今,父・兄・妹の全員が目を覚ましたタイミングで,朝ごはんを配膳したいと思っています。この場合,どのようにして「全員が目を覚ました」ということを知れば良いでしょうか?
だいたい,以下の二つの方法が思いつくのではないでしょうか。
一つ目の方法は,あなたが常に家族を順番に見て回り,眼を覚ましたかどうかを走り回ってチェックする方法です。この方法を仮に「ポーリング方式」(*1)と名付けましょう。
それに対し,二つ目の方法は,家族に「目を覚ましたら声をかけてね」「起きたらお母さんのケータイにでもメール入れて(ちょっと大げさですが)」というような約束事を決め,一人ひとりが,自主的に報告するようにあらかじめ頼んでおく方法です。この方法を仮に「リスナー方式」(*2)と名付けましょう。
あなたなら,どちらの方式を選びますか?
図2●イベントを知る二つの方法
実は,ActionScript3.0でのイベント処理の考え方は,この二つの方式のうちの後者,「リスナー方式」の考え方に沿って作成されています。
リスナー方式の考え方でイベント処理を作成するには,
- イベント発生時に実行したい処理を作成しておく
- イベントが発生する対象に「イベントが起きた時点で,作成しておいた場所に連絡してね」と声をかける
上述の朝ごはんの例で言うと,伝えるイベントの種類は「目が覚めた」ということです。これは,全員が問題なく伝えられますね。でも,イベントの種類が「会社に出かける」だとしたらどうでしょうか?このイベントは,お父さんであれば成立しますが,会社に勤めているわけではない兄や妹では成立しません。
実はイベントという物は,イベントの発生対象の種類によって,伝えられるイベントの種類が決まっているのです。そのため,イベント処理を作成するためには,「処理対象が,どんなイベントを伝えられるのか」を知っておく必要があるのです(*3)。
上記の2ステップに,このステップを一つ加えましょう。
- イベントの発生対象と,知らせてもらうイベントの種類を知る
- イベント発生時に実行したい処理を作成しておく
- イベントが発生する対象に「イベントが起きた時点で,作成しておいた場所に連絡してね」と声をかける
この三つの手順を,ActionScriptを使ってイベント処理を作成する作業の視点で言いかえると,
- 対象となるクラスで取得できるイベントの種類を調べる
- イベント発生時に実行する関数を作成しておく
- addEventListenerメソッドを使い,イベントと関数を関連付ける
手順の説明の際に,一つ耳慣れない言葉が出てきましたね。「addEventListenerメソッド」です。このaddEventListenerメソッドが,イベント処理作成のポイントとなります。