第5回 イベントリスナーを使う

第5回←教材はこれ!

  • イベントリスナーって初めて聞く気がする。

イベントというのは,ユーザーのマウスクリックやキーボード入力のようなインタラクションから,外部データの読込みや,ディスプレイの描画更新のようなシステムの処理まで,さまざまな事象・状態の変化にともなって発せられるFlash Playerからの信号である。

click
ユーザーがインスタンスをマウスでクリックしたとき
keyDown
ユーザーがキーボードのキーを押したとき
enterFrame
画面の描画が更新されるとき*1

ターゲットのインスタンスに登録された関数は,イベントの発生を検知(listen)して呼出される。そのため,「イベントリスナー」とか「リスナー関数」と呼ばれる。

  • リスナー関数を呼び出すときには必ず引数が渡される(無ければエラー)。なのでその関数の定義は一般的には次のようになる。

function 関数名(引数1:データ型, 引数2:データ型, ... , 引数n:データ型):戻り値のデータ型 {
ステートメント;
}

function xSetTime(eventObject:Event):void {
var nSeconds:Number = getTimer()/1000;
var nMinutes:Number = nSeconds/60;
second_mc.rotation = nSeconds*6;
minute_mc.rotation = nMinutes*6;
}
addEventListener("enterFrame", xSetTime);

  • addEventListener()メソッドの引数について。第1引数はイベントの名前を文字列で指定。「"」で囲む。第2引数のリスナー関数を指定するときには,呼出しの括弧()はつけない。実は第2引数は識別子。識別子は文字列でないので「"」も必要ない!
  • わーなんかめんどくさい話になった。→「イベントをクラスの定数で指定する」
  • ようするにさっきのやつ「"enterFrame"」と指定するのと「Event.ENTER_FRAME」と指定する全く同じ意味。

Eventというのはリスナー関数xSetTime()の引数eventObjectに指定したデータ型で,実はenterFrameイベントのイベントオブジェクトをつくっているクラスである。そのEventクラスに,ENTER_FRAMEという一種のプロパティがある。プロパティと違うのは,値が一定で変わらないことだ。そのため,正確にはクラスの「定数」と呼ばれる。

  • そんなわけで完成形が結局これ。

function xSetTime(eventObject:Event):void {
var nSeconds:Number = getTimer()/1000;
var nMinutes:Number = nSeconds/60;
second_mc.rotation = nSeconds*6;
minute_mc.rotation = nMinutes*6;
}
addEventListener(Event.ENTER_FRAME, xSetTime);

すべてをムービークリップに書き込めたんでこのシンボルをステージに配置するだけで時計が動くのだと。なるほど。

*1:タイムラインが次のフレームに移った時?←フレーム1個でも成立。単純にフレームレートが1/20なら1秒に20回実行されるってことぽい。←現段階での理解