• 締切済み

繰り返し処理

繰り返し処理 初心者な質問かもしれませんが何卒ご教授お願いします。 行いたい処理としては具体的には ムービクリップが100個あってそれぞれ別画像のjpg画像を読み込み そのムービクリップ内のボタンをクリックするとさらにそれぞれ別の画像を読み込むという仕組みです。 100個それぞれ別のムービクリップしても可能だと思うのですがそれだと大変なので 同じムービークリップでインスタス名を変えております。 インスタンス名は下記のように連番にしました。 m1~m100 読み込む画像は下記のようにフォルダを連番にしました。 photo/1/photo.JPG~photo/100/photo.JPG 一つずつ書くと下記のような感じでしょうか… _root.photo.m1.img.loadMovie('photo/1/photo.JPG'); ・ ・ ・ _root.photo.m100.img.loadMovie('photo/100/photo.JPG'); ボタンの方は _root.photo.m100.bt に置き クリックすると _root_box にphotobox.swfを読み込み、読み込み終わったら photobox.swfのムービークリップ top side back に photo/100/top.JPG photo/100/side.JPG photo/100/back.JPG を読み込むという仕組みです。 これもインスタンス名m1~m100のムービクリップ内のボタンによって読み込む画像が異なります。 連番にしたので while文を使用して出来るかと思ったのですがうまくいきませんでした。 どなたか分かる方がいらしたら是非、教えて頂けると大変助かります。 不明な点がありましたらお手数ですがご連絡下さい。 どうぞ宜しくお願い致します。

みんなの回答

noname#35109
noname#35109
回答No.2

??? #1です。 えーと,回答のだいたいの内容が, #1の補足で書かれていることでわかりました。 それは良いのですが..., ご質問と,#1の補足に書かれている内容がズレています。 どちらで回答しようか悩みましたが, 一応,最初のご質問にある方で回答します。 まず,最初の for文は次のようにします。 //////////////////////////////////////////////////////////// for (i=1; i<=100; i++) { // 各 m1~m100 に 固有な変数 n を指定 _root.photo["m"+i].n = i; // 各 m1~m100 内の img に各 JPG をロード _root.photo["m"+i].img.loadMovie("photo/"+i+"/photo.JPG"); // 各 m1~m100 内の btボタンに onRelease の動作定義 _root.photo["m"+i].bt.onRelease = function() { _root.box.loadMovie("photobox.swf"); // ボタンの存在する MC の変数 n を _root の n に代入 _root.n = this._parent.n; }; } //////////////////////////////////////////////////////////// それで, _root に置いた box というムービークリップ自体に, 次のように書きます (box 内のタイムラインのフレームではなく box 自体に書く物です)。 //////////////////////////////////////////////////////////// // このムービークリップがロード表示されたとき onClipEvent (load) { // top,side,back にそれぞれの JPG をロード this.top.loadMovie("photo/"+_root.n+"/top.JPG"); this.side.loadMovie("photo/"+_root.n+"/side.JPG"); this.back.loadMovie("photo/"+_root.n+"/back.JPG"); } //////////////////////////////////////////////////////////// なんと言うかですね, Flash の生い立ちというのが, そもそも時間軸にそってアニメーションさせるものですから, 前もって,一々先々のことまで指定しにくいのです。 例えば,  _root が再生されて フレーム10 で  myMC というムービークリップが動作しだして,  その myMC が 20フレームに達したとき,その中の myMC2 が動き出す。 とか,そういうことって, そのとき(myMC が 20フレームに達したとき)にならないと, そのときがいつなのかわからないでしょう。 ですから, そうなった時々(条件が成立した時々)に, その時点のオブジェクトやフレームにスクリプトを書くのか普通です。 ずっとムービークリップの動向を監視するようなスクリプトを組めば, 最初の段階でもすべてプログラミングできないことはないですが, ムービークリップというものは普通,すごい数になるので, 1つ1つを監視続けること自体が複雑なプログラムになり, また,常に複数のムービークリップを監視し続けなければならないというCPUを無駄に使うことになります。 それで,その慣習と,その慣れで, スクリプトを2箇所に分けています。 ご質問の場合までなら, loadMovie を使うのではなく, MovieClipLoaderクラス のメソッドを使うとなんとかなるかもしれませんが, 私にとってもこのご質問の場合はどうなるのか, 予測が難しいので,スクリプトを2箇所に分けさせていただきました。

takuro000
質問者

お礼

質問の内容が混乱を招く内容で申し訳ありませんでした。 そんな中、とても丁寧にご回答頂きありがとうございました。 ご回答頂いたように2箇所に分けてスクリプトを記述して 作成することができました。 とても丁寧に説明して頂いたのですごい勉強になりました。 ありがとうございました。

noname#35109
noname#35109
回答No.1

全体的に構造や状況がよくわかりませんので, > 一つずつ書くと下記のような感じでしょうか… > _root.photo.m1.img.loadMovie('photo/1/photo.JPG'); > ・ > ・ > ・ > _root.photo.m100.img.loadMovie('photo/100/photo.JPG'); と,書かれている部分のみに回答します。 while文を使うなら, 次のような感じになります。 ///////////////////////////////////////////////////////// i = 1; while (i<=100) { _root.photo["m"+i].img.loadMovie("photo/"+i+"/photo.JPG"); i++; } ///////////////////////////////////////////////////////// Flash では for文を使う場合が多いので, ちなみに書いておきますと, 次のような感じになります。 ///////////////////////////////////////////////////////// for (i=1; i<=100; i++) { _root.photo["m"+i].img.loadMovie("photo/"+i+"/photo.JPG"); } ///////////////////////////////////////////////////////// 他のプログラムについて詳しい方でも, この,ムービークリップなどのインスタンスに動的にアクセスする部分は, 結構わかりにくい(どうすればいいのか見つかりにくい)部分だと思います。 動的にインスタンス名などにアクセスする場合は,  [ ] という「配列アクセス演算子」を使うのが一般的です。 Flash 8 のヘルプより 「ドット演算子と配列アクセス演算子の使用」 http://livedocs.adobe.com/flash/8_jp/main/00001266.html  ~引用~ > 配列アクセス演算子を使用すると、 > インスタンス名および変数を動的に設定および取得できます。 FN0507001 - ドット演算子と配列アクセス演算子 - Flash テクニカルノート http://www.fumiononaka.com/TechNotes/Flash/FN0507001.html --> 2. 配列アクセス演算子 の項目

takuro000
質問者

補足

sassakun さん ご回答頂きありがとうございます。 大変丁寧にご回答頂いたのですごい勉強になりました。 for (i=1; i<=100; i++) { _root.photo["m"+i].img.loadMovie("photo/"+i+"/photo.JPG"); } を使ってみたら画像の読み込みは出来ました。 ありがとうございます。 配列アクセス演算子も勉強します。 何度も大変恐縮ですが ボタンの方ですが for (i=1; i<=100; i++) { _root.photo["m"+i].img.loadMovie("photo/"+i+"/photo.JPG"); _root.photo["m"+i].img内のボタンに対してクリックしたらphotobox.swfを読み込みます。 違うと思いながら下記のように書いてみました。 _root.photo["m"+i].bt.onRelease = _root.box.loadMovie("photobox.swf"); photobox.swfの読み込みが終わったら3枚の画像を読み込みます。 違うと思いながら下記のように書いてみました。 if(_root.box.onData){ _root.box.photo1.loadMovie("mens/"+i+"/photo1.jpg"); _root.box.photo2.loadMovie("mens/"+i+"/photo2.jpg"); _root.box.photo3.loadMovie("mens/"+i+"/photo3.jpg"); } 勉強不足でお聞きするが心苦しいですが 是非ご教授頂ければさいわいです。 どうぞ宜しくお願い致します。

関連するQ&A

専門家に質問してみよう