26.イベント発生時の処理に引数を渡す

イベント発生時の処理に引数を渡したい!

先に言っておくと、他の書き方でも対応できそうですが、ちょっと便利なので知っておくとコードを書く上で精神的に楽になる場合もあるかもしれません。

マウスでボタンをクリックした場合にどうする、なんてよく書くわけですが、この時、基本的な構成として以下のように書けますよね。

myButton.addEventListener(MouseEvent.CLICK , clickHandler);//イベントリスナー設定
function clickHandler():void {
//クリックされた時の処理
}

非常にわかりやすいですね(^^)v

これでもOKですが、何かと関数に引数を渡したい時ってありますよね?

え?ない?うーん、困ったな。それじゃ話が進まないよ。ウソでもいいからあることにして、読み進めて下さい!

よくみる引数の渡し方

リファレンスのサンプルあたりを見るとこういう感じのコードをよく目にすると思います。

myButton.addEventListener(MouseEvent.CLICK , clickHandler);

function clickHandler(e:MouseEvent):void {
//クリックされた時の処理
e.target.visible=false;//←例えばこんなの
}

「e」なんてしてますが、書く人によって、eventだのeventObjectだのいろいろです。

ここはコードを書く人が適当に書けばいいんですが、最初の頃はここが何を意味してるのか、何て書けばいいのかよくわかっていませんでした(^^;

ともかく、こうするとイベントのプロパティからいろいろ処理することができます。

よく使うのは上記のようにe.targetになんぞする、というパターン。

ここではe.targetとはmyButtonを指してるので、上記コードのようにして処理できるわけです。

もちろん、関数clickHandler内でmyButton.visible=false;などとしてもOKなら引数は不要かもしれませんが、関数内でmyButtonが使えない場合、つまり、コンパイル時に「そんなの定義されてねーよ!」って怒られる場合ですね、よくあるでしょ?

こういう場合には、このようにして引数を使えば処理可能なわけです。

こんな引数の渡し方も

上記の記述だとe.targetってmyButtonを指すわけですが、それ以外のオブジェクトをどうこうしたい場合もあります。

例えばmyButtonの親ならe.target.parentと記述してアクセスすることも可能ですが、全く関係ない(つまりこのようにアクセスできない)オブジェクトの場合はどうするのよ?

と思ったら、ちゃんとあるんですねえ。以下のコードをご覧下さい。

myButton.addEventListener(MouseEvent.CLICK , clickHandler(mySprite));

function clickHandler(mspr:Sprite):Function {
return function ():void{
//クリックされた時の処理
}
}

なんだこりゃ?って感じですね。

ともかく、こうすることで関数内のmsprがmySpriteを指すことになりますので、めでたくいじることができるわけです。

また、同じように

myButton.addEventListener(MouseEvent.CLICK , clickHandler(mySprite));

function clickHandler(mspr:Sprite):Function {
return function (e:MouseEvent):void{
//クリックされた時の処理
}
}

とすれば、イベントのプロパティも受け取ることができます。

なんだかややこしい形をしていますが、こういうことができると何かと便利なこともありますので覚えておくと吉であります。

→27.別クラス内でのイベント発生を受け取りたい

25.1ファイルに複数のクラスを書く方法←