• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:引数が変わってしまいます。)

配列に複数のオブジェクトを追加して処理する際の引数の動作に問題がある

このQ&Aのポイント
  • AC3で開発を行っている中で、複数のオブジェクトを配列に追加して一気に処理しようとしていますが、引数の動作がうまくいきません。
  • 問題のソースコードを確認すると、peat配列にfg1とfg2のオブジェクトを追加していますが、クリックイベントの処理でそれぞれのオブジェクトを参照することができません。
  • for文の中でクリックイベントの処理を設定していますが、peat[i]を参照すると、どちらのオブジェクトもpeat[2]となってしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ちょっと乱暴なやり方ですが // クリック時の処理 peat[i].sp.addEventListener( MouseEvent.CLICK , function(event:MouseEvent):void{ test(event, arguments.callee, peat[i]); } ); } ↓ peat[i].sp.addEventListener( MouseEvent.CLICK, function(ind){return function(event:MouseEvent){test(event, arguments.callee, peat[ind])}}(i) ); 簡単に言うと関数を作る関数をその場で実行してる感じです

nrx-0013
質問者

お礼

ご回答ありがとうございます。 お教えいただいた方法で、望みどおりの動作をしました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • usaribo
  • ベストアンサー率28% (2/7)
回答No.1

for文はループ終わった後に、その最終値を取ります。 例) var i:uint for (i=0; i<=2; i++) { } trace (i) // 2がtraceされます。 質問主さまの陥っている現象がまさにそれで、 peat[i].sp.addEventListener この時点で peat[2].sp.addEventListener と同義になってしまいます。 これの回避法ですが、for でループさせている各ループ時のiをMcに記憶させる、等の方法があります。 例) var i:uint; for (i=0; i<2; i++) { this["mc"+i].i = i; //各MCに自分自身に命令が出された瞬間のiを記憶させる this["mc"+i].addEventListener(MouseEvent.CLICK , traceMyNumber); } function traceMyNumber(e:MouseEvent) { trace (e.currentTarget.i); //自分自身のiをtrace。 } しかしSpriteには上記のように内包する変数を追加出来ない為 (Spriteのプロパティ i を作成できません、のようなエラーが出てしまいます) 代替案を考えなければいけないかもしれません。(Mcにしてしまうのが手っとり早いです) 取り急ぎ何故iが2のみを見てしまうかだけは分かるといいなぁと>< ご確認下さい~。

nrx-0013
質問者

お礼

ムービークリップを使用するご助言と、ソースの提供ありがとうございます。 どーしてもSpriteでというわけではないのですが、 出来るだけメモリは節約したいので、Spriteでの方法を探しておりました。 今後も、Spriteでの問題が浮上するようでしたら、ムービークリップに変更しようと思います。 ご回答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A