• 締切済み

配列演算子について

初心者です。とても基本的なことなのですが、 for(i=0;i<10;i++) _root["mc"+i]と書くと、一つ目のmcを指定しているのはわかるのですが、同時に別のというか二つ目のmcを指定する時はどう記述したらいいのでしょうか?

みんなの回答

noname#35109
noname#35109
回答No.1

すみませんが,ご質問の意味がさっぱりわかりませんのです…。 > 同時に別のというか二つ目のmcを指定する はて…??? ここがよくわかりません。 for文や,配列アクセス演算子は, そもそもまとめて同時に複数の変数の値やインスタンスのプロパティを変えるときに使う物ですがそこはよろしいでしようか? 二つ目のmcとかの前に, ご質問で書かれていること自体の現状に関して説明しますよ。 メインムービー(_root)のステージ上に, 「mc0」~「mc9」までのインスタンス名の付いたムービークリップがあったとして, その「mc0」~「mc9」までのインスタンス名の付いたムービークリップのアルファを一気に変えたいとします。 もし,ムービークリップのアルファを, 一気 50 に変えたいときに押すボタンのスクリプトは次のようになります。 ----------------------- on (release) { _root.mc0._alpha = 50; _root.mc1._alpha = 50; _root.mc2._alpha = 50; _root.mc3._alpha = 50; _root.mc4._alpha = 50; _root.mc5._alpha = 50; _root.mc6._alpha = 50; _root.mc7._alpha = 50; _root.mc8._alpha = 50; _root.mc9._alpha = 50; } ----------------------- _alpha はムービークリップなどのインスタンスの不透明度のプロパティです。 上のスクリプトでは,ボタンクリックで,  // _root の mc0 の不透明度を 50 にする  _root.mc0._alpha = 50;  // _root の mc1 の不透明度を 50 にする  _root.mc1._alpha = 50;      … 略 …  // _root の mc9 の不透明度を 50 にする  _root.mc9._alpha = 50; というスクリプトが書いてあるので, 「mc0」~「mc9」の不透明度プロパティが全て 50 になります。 しかし, ほとんど同じ事を繰り返して書いてあるだけで, 書くのも面倒くさいですし, 書き間違いが起こる可能性もありますし, 文字数分のファイル容量も大きくなって無駄です。 そこで登場するのが for文 です。 for文ループで一気に処理をすれば良いわけです。 しかし, 変数の値やプロパティの値の方は簡単に変えられても, 変数名やインスタンス名はそう簡単に変えることができません。 というわけで, 変数名やインスタンス名自体の方を変えるために, 配列アクセス演算子 [ ] が登場します。 上のボタンのスクリプトを, 次のスクリプトに書き替えると同じことができます。 ----------------------- on (release) { for (i=0; i<10; i++) { _root["mc"+i]._alpha = 50; } } ----------------------- わかりますでしょうか? まず for文 ですが, こちらが参考になると思います↓。 「繰り返し文 for - FLASHアクションスクリプト入門編」 http://isvalid.jp/actionscriptLab/ASlesson/actionsctipt_for.html わかりきっていらっしゃいましたら読む必要もありませんが, もし,for文 がわかっていなければ参考にしてみてください。 for文の構文は次のような形をしています。 ------------------------------------------- for(変数の初期値; 変数成立の条件; 変数の次の値){   条件が成立している間ループ } ------------------------------------------- 上のボタンのスクリプトの for文 は次のようになっています。  for (i=0; i<10; i++) {     _root["mc"+i]._alpha = 50;  } コメント(注釈)行を詳細に入れたとすると次のような意味になります。  // 変数 i の初期値は 0 で,  // i の値が 10 未満である条件で  // i の次の値は i+1 という規則でループ  for (i=0; i<10; i++) {    // _root.mc0 ~ _root.mc9 までのアルファを50にする    _root["mc"+i]._alpha = 50;  } 「i++」 は 「i = i+1」 と同じ意味です。 書き方が違うだけです。 もし,for文を使わずに, 配列アクセス演算子だけを使った場合, ボタンのスクリプトは次のようになります。 -------------------------------- on (release) { i = 0; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; i++; _root["mc"+i]._alpha = 50; } -------------------------------- 上に書いた3つのボタンのスクリプトは同じ意味になります。 ======================= というわけで,最初に戻って, > 同時に別のというか二つ目のmcを指定する この意味がわかりません。 for文 と [ ] 配列アクセス演算子を使うこと自体, 一つ目も,二つ目も,三つ目も… ダーーーーーッと,一気にやってしまうことなのです。 つまり,ご質問で, > for(i=0;i<10;i++) > > _root["mc"+i]と書くと、一つ目のmcを… と書かれている時点で, 一つ目,二つ目どころか,一気に 10個の MC に対して何か操作をしていることになります。 回答はすでにご自分で書かれています。 ですから,質問がわかりません。 ここまでの説明をなんとか理解してくださって, 疑問点が明白になりましたら, 具体的にどういうご質問なのか補足してください。

emaweb21
質問者

補足

たとえば、ロールオーバーで_root.mc1以外を50%にしたい時などはどのようにしたらいいでしょうか? 以外を~したい時などの記述法がしりたいです。

関連するQ&A