第5回 イベントリスナーを使う
第5回←教材はこれ!
- イベントリスナーって初めて聞く気がする。
イベントというのは,ユーザーのマウスクリックやキーボード入力のようなインタラクションから,外部データの読込みや,ディスプレイの描画更新のようなシステムの処理まで,さまざまな事象・状態の変化にともなって発せられるFlash Playerからの信号である。
- ムービークリップが受け取るイベントの種類とか以下。
ターゲットのインスタンスに登録された関数は,イベントの発生を検知(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回実行されるってことぽい。←現段階での理解