event.currentTarget
月曜日, 18 1月 2010
最近仕事に追われてめっきりネタを考えてませんでした。。。
今日は少し余裕ができてネタもできたので久々に書きます。
今回はマウスのクリックの動作について
たとえば画面内に同じサイズのMCをグリッド上に9つ並べたとします。
そしてそれとは別にもう一つ枠型のMCを用意します。
やりたいことは単純で敷きつめられたMCのどれかをクリックしたら、枠型のMC(以後frame_mc)を移動させるというものです。

で、9つのMCは1つのMCでフレームに9種類並べて(9フレーム)配置する時にフレームを飛ばしてランダムに並べてるとします。←分かりづらい?
そうした時に単純に並べている画像に対してそれぞれaddEventListenerでCLICKイベントをつけます。
for(var i:uint=0; i<nums; i++){
mc_ary[i].addEventListener(MouseEvent.CLICK,onChange);
}
function onChange(event:MouseEvent):void{
frame_mc.x=event.target.x;
frame_mc.y=event.target.y;
}
こうしてframe_mcをそれぞれの場所に移動させるものをonChange関数に書いたのですがさっぱりうまくいきませんでした・・・。
どううまくいかないかというと、xもyも0に行くのです。
しばらく「あーでもない、こーでもない」とやっていて、見つけたのが
「event.currentTarget」
こいつ。
まあ、見た目からして一つ上のターゲットってことでしょうけど、こんなものがあったとはつゆ知らず。
ためしてみたらバッチリ!
どうやら、内包されている場合は中のオブジェクトに対してtargetが働いているみたいです。なので、すべて(0,0)に向かっていったみたいです。
MCを内包してクリックイベントを取る場合はみなさん気をつけましょう・・・って俺だけかもしれない。。。
一応、以下が正しい表記です。
for(var i:uint=0; i<nums; i++){
mc_ary[i].addEventListener(MouseEvent.CLICK,onChange);
}
function onChange(event:MouseEvent):void{
frame_mc.x=event.currentTarget.x;
frame_mc.y=event.currentTarget.y;
}