この質問は、MouseEvent.CLICK イベント タイプだけに関連するものではなく、AS3 に既に存在するすべてのイベント タイプに関連しています。カスタム イベントについてはよく読みましたが、これまで自分がやりたいことを実行する方法がわかりませんでした。説明しようと思います。ご理解いただければ幸いです。
これが私の状況の実例です:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}
function doSomething(e:MouseEvent){ /* */ }
しかし、 someVarをパラメーターとしてdoSomethingに渡すことができるようにしたいと考えています。だから私はこれを試しました:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, function(){
doSomething(someVar);
});
}
function doSomething(index){ trace(index); }
この種の作品は期待どおりではありません。関数クロージャーにより、MouseEvent.CLICK イベントが実際に発生したとき、forループはすでに終了しており、someVarは最後の値 (例では9 ) を保持しています。したがって、各ムービー クリップ内でクリックするたびに、パラメータとして9を渡してdoSomethingが呼び出されます。そして、それは私が望むものではありません。
カスタム イベントを作成すればうまくいくはずだと思いましたが、MouseEvent.CLICK イベントが発生したときにカスタム イベントを発生させてパラメータを渡す方法が見つかりませんでした。今はそれが正しい答えかどうかわかりません。
どうすればいいですか?