- ベストアンサー
ActionScriptでの繰り返し記述をスッキリまとめる方法
- ActionScriptで繰り返し同じような記述をする場合、for文を使用することでコードをスッキリまとめることができます。
- プログラムの内容は複数のインスタンスを表示してクリックで順次消えるというもので、インスタンスに記述ではなくフレームに記述しています。
- この場合、for文を使ってインスタンスの配列を作成し、クリック時の処理を繰り返すことで、繰り返し記述をスッキリまとめることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
for(i=1; i<○; i++) { } というfor文内に function があると、その function 内に 変数 i が到達しません。 したがって、例えば b1 の場合 this.b1.onRelease = function(){ _root["b"+i]._visible = false; }; と定義さます。 逆に、このように定義されないと、 (つまり変数 i が function内まで到達してしまうと、) ["b"+i] などを使った function が定義できなくなるので、使いにくくなると思います。 //--- 回避策1 ----------- // 各 b1 ~ bn に自分のインスタンス名を取得させ、 // _root 上の同名のインスタンスの // _visible プロパティを false にする。 for (i=1; i<=3; i++) { this["b"+i].onRelease = function() { _root[this._name]._visible = false; }; } // --- 回避策2 ----------- // 各 b1 ~ bn 内の任意の変数(例:j) に i を代入しておき、 // その変数の値を使って _root 上の["b"+this.j]インスタンスの // _visible プロパティを false にする。 for (i=1; i<=3; i++) { this["b"+i].onRelease = function() { _root["b"+this.j]._visible = false; }; this["b"+i].j = i; }
その他の回答 (2)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#2で回答した者です。 > this["b"+i].j = i; > の意味ですが、 > 「b1 のなかにある j は 1 、 b2 のなかにある j は 2 …」 > との定義と考えていいのでしょうか。 そうです。 雰囲気からすれば、 b1 内に作った j というプロパティを 1 にする。 b2 内に作った j というプロパティを 2 にする。 …… というような感じです。 > this["b"+i].j = i; はfor文の直後に書いてもいいのですよね? 直後? 直後というのは、for文の後 と言う意味ではなく、 for文内の1行目 という意味でしたらそれで良いと思います。 私も書いてからそれに気付きました。 普通は変数は先に決めておいて、後から function を定義しますから、 書かれていらっしゃる通り、for文内の1行目に this["b"+i].j = i; がある方が自然だと思います。
お礼
たびたびありがとうございます。 直後の意味はおっしゃるとおりです。 jがプロパティだったのは今気づきました。プロパティって自分で自由に作れるのですね。 勉強になりました!
- is_may
- ベストアンサー率65% (58/89)
私もあまり詳しくありませんがたしか for(i=1;i<10;i++){ this["b"+i].onRelease = function(){ _root["b"+i]._visible = false; } } でいけると思います。あまり力になれなくて申し訳ないm(_ _)m
お礼
だめでした~。 (Tc_T`)
お礼
できました!! 6時間もこの問題で悩んでいただけに感激もひとしおです。ありがとうございました。
補足
<追加> いろいろ試してみた結果、 「b1、b2、b3 を押して x1、x2、x3 を消す」 などという場合は回避策1は使えず、回避策2になるようですね。 ちなみに、 this["b"+i].j = i; の意味ですが、「b1 のなかにある j は 1 、 b2 のなかにある j は 2 …」との定義と考えていいのでしょうか。 また、this["b"+i].j = i; はfor文の直後に書いてもいいのですよね?