![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
AC3で開発を行っております。
複数のオブジェクト(変数の種類は同じ)を配列で確保し、
一気に処理をしようとしているのですが、引数の動作がうまくいきません。
以下が問題のソースです。
var peat:Array ;
var fg1:Object = new Object();
var fg2:Object = new Object();
fg1 = { _sp:Sprite, _img:Loader , _url:String , _x:int, _y:int };
fg2 = { _sp:Sprite, _img:Loader , _url:String , _x:int, _y:int };
peat = new Array( fg1 );
peat.push( fg2 );
for(i = 0;i < 2;i++)
{
// 値の代入
// クリック時の処理
peat[i].sp.addEventListener( MouseEvent.CLICK
, function(event:MouseEvent):void{
test(event, arguments.callee, peat[i]);
}
);
}
クリックしたときに それぞれのオブジェクトを参照したいのですが、
どちらも peat[2] を参照しているようなのです。
(for文の後に i=0 とすると先に設定したほうは正しく動作します。)
AC3での開発が初めてなので、変数の宣言から怪しいかも知れませんが
ご助力お願いいたします。
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) );
簡単に言うと関数を作る関数をその場で実行してる感じです
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のみを見てしまうかだけは分かるといいなぁと><
ご確認下さい~。
ムービークリップを使用するご助言と、ソースの提供ありがとうございます。
どーしてもSpriteでというわけではないのですが、
出来るだけメモリは節約したいので、Spriteでの方法を探しておりました。
今後も、Spriteでの問題が浮上するようでしたら、ムービークリップに変更しようと思います。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
flash (.swf) を編集したい
-
スマホでサイトの画像を長押し→...
-
ダウンロードしたデジブックはa...
-
uwscでExcelに自動記入
-
テキストエディタ選び
-
ウディタで作ったゲームを公開...
-
多次元配列のデータがうまく吸...
-
laptop go2からの買い替え、lap...
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
Flash ブラウザ 段階的に排除 ...
-
パソコンについて質問なんです...
-
バナー広告の事に質問です! 広...
-
ゲオでカードを作るのは何歳か...
-
タイピング Flash不要
-
AS3.0でこまっています。教えて...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
スクリップト
-
chrome flash
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
actionScript3.0にてTouchEvent...
-
FlashPlayer6から8の仕様の変更...
-
引数が変わってしまいます。
-
AS2.0からAS3.0にうまく変換で...
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
c++ cmathとmath.h
-
TextChangeイベントが発生しない
-
python: 直角三角形の種類を求...
-
VB.NET の配列の要素数
-
変な質問ですみません、n番目の...
-
配列の要素番号を取得するには?
-
#define 文
-
重複しない乱数の生成
-
VBでボタンを押すと画像をラン...
-
LRESULTとHRESULT
-
エラー438でオブジェクトの...
-
三辺の長さから角度を求めたい...
-
XML内のタグの内容を、変数に出...
-
ifdefとenum
おすすめ情報