• 締切済み

繰り返し処理

繰り返し処理 初心者な質問かもしれませんが何卒ご教授お願いします。 行いたい処理としては具体的には ムービクリップが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文を使用して出来るかと思ったのですがうまくいきませんでした。 どなたか分かる方がいらしたら是非、教えて頂けると大変助かります。 不明な点がありましたらお手数ですがご連絡下さい。 どうぞ宜しくお願い致します。

  • Flash
  • 回答数2
  • ありがとう数1

みんなの回答

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

  • loadMovie()を組み込んだswfファイルをさらに別のswfファイルで読み込みたい。

    ActionScript初心者です。よろしくお願いいたします。 掲題の通りなのですが、外部のjpgファイルをloadMovieで読み込むswfファイルを、さらに別のswfファイルで読み込みしようとすると、jpgが表示されずに困っています。具体的には以下の通りです。 (1)jpgファイルを読み込むswfファイルについて ・ファイル名:「sub_screen.swf」 ・ムービークリップシンボル(インスタンス名"PHOTO_STAGE")に外部のjpgファイルを読み込ませるために、ボタンに以下のスクリプトを記述 "on(release){loadMovie("photo1.jpg",_root.PHOTO_STAGE);}" ・「sub_screen.swf」及び「photo1.jpg」は同一フォルダに保存 (2)sub_screen.swfを読み込むswfファイル ・ファイル名:「main_screen.swf」 ・ムービークリップシンボル(インスタンス名"STAGE")に「sub_screen.swf」を読み込ませるべく、ボタンに以下のスクリプトを記述 "on(release){loadMovie("sub_screen.swf",_root.STAGE);}" ・「main_screen.swf」、「sub_screen.swf」及び「photo1.jpg」は同一フォルダに保存 以上のような条件で「main_screen.swfファイル」を実行すると、jpgファイルだけが表示されません。(sub_screen.swfのボタン等は表示されます。)2重にloadMovieを実行することは不可能なのでしょうか? ご協力をお願いします。

  • loadMovieで外部swfの読込みについて

    現在、外部swfを連続で再生させるフラッシュを作成中です。 以下の方法で実現しています。 ------------------------------------------------- 親SWFの_rootに,例えば「loadMC」というインスタンス名のムービークリップを作ります。 このMCは小さくて透明のMCか,中に何も入っていない空のMCが良いと思います。 そして,親SWFのフレームのスクリプトに _root.loadMC.loadMovie("movie1.swf"); と書けば,「loadMC」というインスタンス名のムービークリップに「movie1.swf」が読み込まれます。 またはボタンにスクリプトを書いて,ボタンで読み込みをさせても良いです。 そして,「movie1.swf」の最終フレームに, _root.loadMC.loadMovie("movie2.swf"); と書いておきます。これで同じ「loadMC」に「movie2.swf」が読み込まれます。 同じ所に新たなムービーを読み込むと自動的に前のムービーは unload されるので, unloadMovie(); は必要ありません。 「movie2.swf」の最終フレームには _root.loadMC.loadMovie("movie3.swf"); 「movie3.swf」の最終フレームには _root.loadMC.loadMovie("movie4.swf");   …  … ------------------------------------------------- 作成後のプレビュー又はswfをダブルクリックなどで直接表示させると正常に表示されます。 しかし、HTMLに埋め込むと真っ白な状態でまったく表示されません。 調べているのですが原因がわかりません。 どなたかご教授のほど宜しくお願い致します。

    • ベストアンサー
    • Flash
  • ムービークリップのボタン化

    menu01_mcというムービークリップをボタンにしたいのですが、 ボタン自体に on (release) { _root.photo_mc.loadMovie("1.jpg"); } と書くと正常に動くのですが、 タイムライン上に menu01_mc.onRelease = function(){ _root.photo_mc.loadMovie("1.jpg"); } と書くと動きません。 どのようにすればいいのでしょうか? わかる方教えてください。よろしくお願いします。

  • 外部画像の読み込みについて

    現在、Flash MX(ActionScriptのバージョンは確認方法がわかりませんでした・・・)を使用して ムービーが読み込まれた際に画像ファイルを埋め込む、といったプログラムを行っています。 ステージにimgというインスタント名のムービークリップを設置し、1フレーム目に img.loadMovie("./img/01.jpg"); というActionをプログラムしているのですが、環境によってうまく動作しません。 環境によっては、というのは、PC上ではうまく動作するのですが、携帯からアクセスするとうまく動作してくれません。 携帯でアクセスした場合にうまく動作してほしいので、困っています。 色々試してみたところ、ムービークリップに下記のようなアクションスクリプトを導入したところ、動作しました。 on(KeyPress "1"){ _root.img.loadMovie("./img/01.jpg"); } ただし、ステージ上にインスタント名img2のムービークリップを追加で設置し、下記のようになスクリプトを導入してみたところ imgのみ正常に画像が表示され、img2には何も表示されませんでした。 on(KeyPress "1"){ _root.img.loadMovie("./img/01.jpg"); _root.img2.loadMovie("./img/02.jpg"); } PCで動作確認を行う場合、いずれも正常に動くので対処法がよくわかりません。 最終的には、n個の画像をムービーがロードされたときに自動配置するようにしたいのですが このような場合、どのようにプログラムしていけばよいのでしょうか。 また、あらかじめ画像を読み込むだけ読み込み必要なときにのみ表示する、といったことは可能でしょうか? 解決策をご教授いただければ幸いです。よろしくお願いいたします。

  • Flash 8BasicでloadMovieを使う時

    Flash 8BasicでloadMovieを使う時に ボタンの中にムービークリップを配置して そのムービークリップをloadMovieで変更したいのですが、下記のようにしても出来ませんでした。これでは無理なのでしょうか? ボタンをimageB ムービークリップをimageM 同じフォルダーに読み込む画像image.jpg loadMovie("image.jpg", _root.imageB.imageM); 何かいい方法はないでしょうか? よろしくお願い致しますm(__)m

    • ベストアンサー
    • Flash
  • 外部SWFの中のムービークリップを拡大したい

    こんばんわ! ちょっとわからないことがあるので質問があります。 よろしくお願いします。 メインの空ムービー(インスタンス名"loadpoint")に外部SWF"hallo.swf"を読み込むとします。 メインに取り付けた拡大、縮小ボタンで 外部SWF"hallo.swf"の中のムービクリップ(インスタンス名"touten_mc")を拡大させるにはどのようにしたらよろしいでしょうか? ※ 拡大ボタンにいれたスクリプト 単純に on(release) _root.loadpoint.touten_mc._xscale = 110; _root.loadpoint.touten_mc._yscale = 110; } 結果できませんでした よろしくおねがいします。

    • ベストアンサー
    • Flash
  • loadMovieのswf読み込み時の一瞬

    制作環境  windows vista flash CS3 Professional ------------------------- flash初心者です。 loadMovieで外部swfを読み込む前に一瞬_rootの画像が表示されてしまうことで困っています。 作業としては、 top.swfにメニューをつけ、リンクを貼って loadMovieでswfを切り替えています。 以下3つは読み込む外部ファイルです。 ・about.swf ・catalog.swf ・service.swf top.swfに配置したメニューボタン(about、catalog、service)に下記の記述をし、 ■aboutボタン on (release) { _root.moviearea.loadMovie("about.swf"); } ■catalogボタン on (release) { _root.moviearea.loadMovie("catalog.swf"); } ■serviceボタン on (release) { _root.moviearea.loadMovie("service.swf"); } ボタンを押すと_rootにそれぞれちゃんと読み込まれるまではいきました。ですがその際、例えばabout.swfが読み込まれた後に他のボタンを押して別のswfファイルを読み込む一瞬、_rootに配置してある画像がちらっと表示されてしまいます。 色々調べて外部swfファイルの背景の問題かもしれないと思い、ドキュメントサイズと同じサイズの背景色で塗りつぶしたムービークリップを配置するなどしてみましたが、やはり一瞬ですが_rootの画像が見えてしまいました。 外部ファイルから外部ファイルへスムーズに切り替えができるようにするにはどのようにしたらよいのでしょうか。 どなたかお力をお貸しくださいませんか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • loadMovieとonEnterFrameについて

    はじめまして FLASH8を使用しています。 ActionScript初心者です。よろしくお願いします。 単体のswfだと機能するのですが、loadMovie後機能しなくなってしまいます。 読み込ませる側のアクションは ▽ボタンシンボルに on (press) { _root.moveMenu_1 = -138; menu_name.text = "キッズメニュー"; menu_text.text = kidsData; } ▽フレームアクション loadVariables("kidsmenu.txt", this); loadVariables("menmenu.txt", this); loadVariables("ladymenu.txt", this); loadVariables("seniormenu.txt", this); moveMenu_1 = -296; this.onEnterFrame = function() { img_y._x += ((0-moveMenu_1)-img_y._x)*0.1; }; MCのインスタンス名は「img_y」です。 他にボタンが3つほどあります。 swf単体だと機能します。 loadMovie後text・外部テキストは読み込むのですが、スクロールしなくなってしまいます。 これを3_1.swfとしました。 読み込む側のアクションは ▽ボタンシンボルに on (press) { _root.moveMenu = 2100; } 他に4つほどボタンがあります。 ▽フレームアクション scroll_flag = 0; moveMenu = 0; this.onEnterFrame = function() { if (scroll_flag == -1) { if (back_img._x<0) { moveMenu -= 20; } else { moveMenu = 0; } } if (scroll_flag == 1) { if (back_img._width+back_img._x>700) { moveMenu += 20; } else { moveMenu = 2800; } } back_img._x += ((0-moveMenu)-back_img._x)*0.1; }; back_img.c_1.loadTarget.loadMovie("1_1.swf"); back_img.c_2.loadTarget.loadMovie("2.swf"); back_img.c_3.loadTarget.loadMovie("3_1.swf"); back_img.c_4.loadTarget.loadMovie("4.swf"); back_img.c_5.loadTarget.loadMovie("5.swf"); スクロールするMCを「back_img」としました。 他に読み込んだものは機能したんですが 3_1だけうまく機能しません。 長々と失礼しました。

    • ベストアンサー
    • Flash
  • ボタン

    以下のようなスクリプトで、写真のメニューを作っています。 画像の読み込みまでは、うまくできたのですが、ボタンにする ところでつまづいています。 以下のスクリプトでは、どのボタンをクリックしても、変数mに10が代入されているため、10.jpgがphoto_mcに表示されてしまいます。どのようにすれば、 menu1_mcをクリックすれば、1.jpg、 menu2_mcをクリックすれば、2.jpg、 menu3_mcをクリックすれば、3.jpg・・・ のようになるのでしょうか?説明が下手で申し訳ありません m(_ _)m i = 10; /*trace(i);*/ for (y=0; y<10; y++) { m = y+1; obj = this.attachMovie("menu", "menu"+m+"_mc", y); obj._x = 30; obj._y = 70*y+10; /*画像読み込み*/ name = "menu"+m+"_mc"; this[name].photo_mc.loadMovie("photo/"+m+".jpg this[name].photo_mc._xscale = 15;//% this[name].photo_mc._yscale = 15;//% /*ボタン化*/ this[name].onRelease = function() { _root.photo_mc.loadMovie("photo/"+m+".jpg"); }; } 環境はFlashCS3、ActionScript2.0です。 よろしくお願いします。

  • flashで、レベルの違うボタンから外部swfファイルの読み込み

    flash初心者のkiyuです。 メインのflashサイトに外部swfファイルを読み込みたいのですが、上手くいきません。 1.mcはrootにおいてあります。 2.ボタンは2つあり、1つはおなじrootの同じステージ内。そして、2つ目のボタンは違うレベルにあります。 3.同じrootにあるボタンは読み込み可能。でも、違うレベルにあるボタンは読み込み不可。 コードは、 on(release){ _root.gotoAndPlay("フレーム名"); _root.mcのインスタンス名.loadMovie("外部ファイル名.swf"); } です。 いろいろ思考錯誤をくりかえしたのですが、どうにも上手くいきません。。。 よろしくお願いします。

専門家に質問してみよう