前回はこちら
●動くとすぐに分かるよ
せっかくだ。イベントハンドラに関する話をまとめて片付けておく。
スプライトになにかが起こった時(=イベントが発生した時)、それに反応してスクリプトを実行させる、それがイベントハンドラだ。以前解説したonClipEventはその先駆けとなった機能。ほぼ同様の機能だが、イベントハンドラの方が先進的で、捕捉出来るイベントの種類も豊富。そのため、onClipEventは今はかなり影の薄い存在に成り果てている。XPが出たあとのMeみたいなもんだ。
じゃあ、イベントハンドラを使ってマウスを追尾するオブジェクトを作ってみよう。
その前に、onClipEventを使った時のサンプルを書いておく。コピペは全角注意な。
onClipEvent(enterFrame){
_x = _root._xmouse;
_y = _root._ymouse;
}
極めてシンプルだ。じゃあ、これをイベントハンドラバージョンに替えてみよう。
さっきはクリップイベントに書いたが、今度はフレームアクションに書くぞ。あらかじめ、スプライトにインスタンス名をつけておくのを忘れずに。
sp1.onEnterFrame = function(){
this._x = _xmouse;
this._y = _ymouse;
};
これでさっきのと同じ動きをするスクリプトができた。
いくつかのポイントがある。まずは、見て分かる通りこれは『=』、つまり代入演算子を使った“代入文”になっている。イベントハンドラというのは、目的のものを代入して使う代物だと言うことだ。
そして、代入されているもの。function(){……};と言う一連の流れはいわゆる関数という奴の宣言文だ。しかも、匿名関数という特殊な使い方をしている。この辺はめんどくさいので今回はパス。とりあえず、この形式だけ憶えればいいわ。インスタンス名(sp1)に、ハンドラ名(onEnterFrame)、そしてfunction(){};。
そうそう、一つ重要なのがこの最後のセミコロンな。
本家FLASHだと省略しても怒られないらしいが、SuzukaやParaFla!だと怒られてしまう。これは仕様なので文句は言うなって言う話だ。
とりあえず、a=1って書いたあとにはセミコロンつけるだろ?それと同じノリで、代入文の後にごく自然にセミコロンをつけているんだと解釈しておこう。
onClipEventはそのスプライトでしか指定出来なかった。だが、イベントハンドラは外部からも指定出来る。そのため、フレームアクションに書くこともできる。そのため、フレームアクションで全てのスクリプトを一元的に管理出来るようになり、便利だ。
逆に、スプライトのクリップアクションに埋め込みたい場合は一ひねりしないといけない。なにせ、これはただの代入文だ。そのままぽんとクリップアクションに書き込むわけにはいかない。クリップイベントの中で代入する必要がある。
一番無難なのはonClipEvent(load){}の中に書くことだ。これなら、最初に確実に、かつ一度だけ実行してくれる。一回代入したら、他の変数同様書き換えるまで有効だ。
イベントハンドラの種類は実に多種多様だ。onEnterFrameや、コピーする時にしか使えなさそうなonLoad、さらにマウスのクリックやドラッグアウトなどにも一通り反応する。
onClipEventにもあったmouseDownやmouseUpもonMouseDownやonMouseUpで代用出来る。見ての通り、最初にonがついて、その次の文字が大文字になった名前になっている。
それに加え、onPressやonReleaseなんて言う、ボタンと同じイベントもある。つまり、これを使いこなせばボタンはもう要らない訳だ。まあ、めんどくさいけどな。

3