MovieClipLoaderの使い方がわかりません

このQ&Aのポイント
  • Flash MX 2004 Proを使用しています。外部swfファイルをつなげて表示したいが、MovieClipLoaderの使い方がわからない。
  • 外部ファイルをロードするタイミングと順序を設定したい。
  • Loadingの表示もしたいが、Flashの初心者でわからない部分が多い。
回答を見る
  • ベストアンサー

MovieClipLoaderの使い方がわかりません。。。

Flash MX 2004 Proを使用しています。(OSはXPです。) 複数の外部swfファイルをつなげて(1つのswfファイルを最後まで見終わったら次をロードするというような形で)表示していきたくて、調べてみたらMovieClipLoaderというのを使うとうまくいくようだったので使ってみたいのですが、ヘルプを見ても全く使い方がわからない状態です。 外部swfファイルの読み込み場所として、rootにムービークリップを1つ用意しました。 外部ファイルをロードし始めるタイミングは、タイムライン145、195、245のレイヤーに配置してあるムービークリップ内にあるムービークリップのon(release)イベントが発生したときです。それぞれのタイムラインで、最初に呼び出す外部ファイルは異なります。 <外部ファイルの読み込み順> 1st.swf→2nd.swf→3rd.swf 配列かなにかにファイル名を格納して次の要素があればその名前のファイルを読むという形にしたいです。 <各タイムラインでon(release)イベントが発生した時に最初に読込む外部ファイル> タイムライン145:1st.swf(このファイルの再生が終わったら2nd.swfを読込んで1st.swfと差し替える) タイムライン195:2nd.swf(このファイルの再生が終わったら3rd.swfを読込んで2nd.swfと差し替える) タイムライン245.swf:3rd.swf(このファイルの再生が終わってもなにも読込まない) 各ファイル読み込み時にそれぞれLoadingの表示もしたいです。 私はJavaをかじったことがある程度で、Flashはまったくのド素人です。どこで宣言されたかわからない変数や、無名関数なんかに踊らされて、他の方の質問を読ませていただいてもちんぷんかんぷんでした。 稚拙な表現で質問内容を書き綴ってしまいましたが、ご不明な点があれば補足しますので、よろしくおねがいします。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

おそらくですが、「再生」ボタンがクリックされるごとに、1st.swf から 3rd.swf を順に読み込んで再生していきたいとのことではないでしょうか? ムービーを読み込むフレームを変えているのも、読み込んだムービーの再生終了を待つためではないかと思います。 「再生」ボタンがクリックされた時に読み込みを実行するものとして、ムービーの再生中は「再生」ボタンをクリックできなくし、再生終了時に再び「再生」ボタンをクリックできるように戻しておく、というのはいかがでしょう。 release イベントを使って読み込みを実行するのであれば、ムービークリップでクリックを検出しない間は release イベントが発生しないため、読み込みも実行されません。フレームを使ってムービーの再生終了を待つ必要はなく、実は1フレームだけでも作れてしまいます。 仮に、ムービーを読み込む側を Loader.swf 、読み込むムービーを 1st.swf ・ 2nd.swf ・ 3rd.swf とします。 Loader.swf には、ステージ( _root )に、ムービーを読み込むためのムービークリップ”load_area”と、「再生」ボタンであるムービークリップ”play_btn”があるとします。 MovieClipLoader を使ってロード済みバイト数と読み込む総バイト数の取得は可能ですが、読み込む対象が JPEG 画像ではなく swf ファイルの場合は、読み込みの済んだフレームから順次再生されるので、完了率が 100 %になる前に再生が始まってしまいます。 ですから、MovieClipLoader で完了率を出そうとせずに、読み込む swf ファイルの方にロード画面を作っておいた方が簡単だと思います。 Now Loading の作り方は以前別の質問で紹介しましたので、よろしければご参照ください。(回答の後半部分がロード画面の作り方になっています) ネットの解説サイトでも、作り方を説明しているところはたくさんあるようです。  ・ボタンを押してもすぐ戻ってしまう・・・。   http://okweb.jp/kotaeru.php3?q=1165503 Loader.swf の方では、1st.swf ~ 3rd.swf の再生が終わったかどうかは分かりません。 終了を検出する方法はいろいろ考えられますが、今回は、再生終了時に必要なことは、「再生」ボタン(ムービークリップ: play_btn )を再びクリックできるようにする処理だけです。 プログラム的には少々汚くなりますけど(^^;)、それぞれのムービーの中から直接 play_btn の属性を操作してクリックを可能にする、という方法はいかがでしょう。 各ムービーで、再生終了時に何らかのフラグを立てて、play_btn ではこのフラグを監視してクリックの可・不可を決める、といった方法もあります。 Flash には階層という考え方があります。 自分以外の階層にあるインスタンスや変数・関数を参照したい場合は、目的のものを持っている階層までの指定(ターゲットパス)が必要です。 1st.swf ~ 3rd.swf は、Loader.swf が持っている”load_area”というムービークリップに読み込まれますので、Loader.swf の中では、これらのムービーは load_area というムービークリップとして扱われます。 Loader.swf にあるムービークリップ play_btn は、load_area から見ますと、自分の親の別の子にあたります。 よって、load_area から play_btn のプロパティ等を参照するには、親を指す表現である _parent を使って、  _parent.play_btn.*** = ・・・; で参照できます。 ムービークリップでクリックを検出可能にするかどうかは、enabled というプロパティを操作します。true でクリック可能、false にするとクリックが検出されなくなります。 play_btn の enabled プロパティの操作は、最初はデフォルトである true 、読み込みを開始した時に false 、そして、読み込んだムービーの再生が終了した時は true に戻しておく、といった流れになります。 次のようなスクリプトを、1st.swf と 2nd.swf の最後のフレームに、それぞれ記述してください。3rd.swf は最後のムービーですから、「再生」ボタンはクリックできないままでも構わないと思います。 (以下のスクリプトの各行頭に、全角のスペースが入っています。コピーして利用する際はご注意ください)  //「再生」ボタンを押せるようにする  _parent.play_btn.enabled = true;  //タイムラインはここで止める  stop(); Flash では、ムービー自身もムービークリップとして扱います。 普段は _root と言えばムービー自身であり、ステージにあるボタンやムービークリップ、メインのタイムラインにターゲットパスを付けずに記述した変数・関数などは、全て _root.*** = ・・・で参照できます。 例えば 1st.swf で _root の表現を使っている場合、1st.swf 単体では 1st.swf 自身を指します。 しかし今回の場合は、1st.swf は Loader.swf の中の load_area に読み込まれるため、この時点で、1st.swf の中で使われていた _root は、Loader.swf を指すように変わってしまいます。 こんなことにならないように、Flash Player 7 からは、_lockroot というプロパティが登場しました。 _lockroot はムービークリップが持っているプロパティの1つです。 Loader.swf のタイムラインで  load_area._lockroot = true; というアクションを実行しますと、load_area に読み込まれる swf ファイル内で使われている _root は、引き続きそのムービー自身を指すようになります。 先述の play_btn の話で、_root ではなく _parent を使う理由も、_root が指す対象の問題にあります。 load_area と play_btn は、ともに Loader.swf のステージにあります。 1st.swf ~ 3rd.swf が load_area に読み込まれた時は、  _root.play_btn = ・・・; このようにしても、play_btn を操作することが可能です。 しかし、_lockroot を適用しますと、この _root は 1st.swf ~ 3rd.swf 自身を指すため、Loader.swf 内の play_btn を正しく指定できなくなります。 --------------------- あとは、play_btn がクリックされた時にムービーを読み込む処理を入れれば完成です。 読み込むファイル名を配列変数に入れ、再生するムービーの番号を変数で管理すると、  ファイル名の配列[ 再生するムービーの番号 ] このような形で、配列に入っているムービーの名前を参照しながら、順に再生していくことができます。 Loader.swf のフレーム1で、初期設定として、必要な変数の用意と、先述の _lockroot の設定を行います。  //読み込むムービーの_rootの参照先を保護  load_area._lockroot = true;  //ムービーの表示領域を、最初は非表示にする  load_area._visible = false;  //ファイル名のリストと、ファイルの総数・再生中のファイル番号の管理変数  file_tbl = new Array( "1st" , "2nd" , "3rd" );  file_max = file_tbl.length;  file_no = 0;  //MovieClipLoaderオブジェクトを生成  load_obj = new MovieClipLoader(); ムービーの読み込みは、MovieClipLoader を使う場合は loadClip というメソッドを使います。 読み込みは「再生」ボタンが押された時ですので、play_btn に、オブジェクトアクション(インスタンスに設定するアクション)として設定します。 スクリプトにしますと、play_btn に設定するスクリプトは、大体、次のようになります。  //クリックされた時の処理  on(release)  {   with( _root )   {    //読み込むファイルが残っている場合のみ、読み込みの処理    if( file_no < file_max )    {     //読み込みを実行     load_obj.loadClip( file_tbl[ file_no ] + ".swf" , load_area );     //次に読み込むファイル番号を更新     file_no++;     if( file_no >= file_max )     {      file_no = file_max;     }     //このムービークリップをクリックできなくする     this.enabled = false;    }   }  }   ActionScript では、操作したいインスタンスや変数がどこにあるのかを細かく指定しなければなりません。 今回は、ファイル名を管理する配列などは、まとめて _root 階層に定義してありますので、play_btn からこれらを参照するには、_root.・・・というように、_root までのターゲットパスが必要です。 操作する変数などの数が多いと、いちいちターゲットパスを書くのは面倒です。 with というアクションは、この手間を省くためのものです。 読み込みだけなら、loadMovie というアクションでも可能です。 MovieClipLoader では、loadMovie よりもロードの進捗状況を細かく把握できます。完了率の取得も可能ですが、先述の通り、読み込むものが swf ファイルの場合はロードが終わらなくても再生が始まるという仕組みのために、MovieClipLoader で完了率を出すのはオススメしません。 今回は、無理に MovieClipLoader を使う必要はないかと思います。 強いて MovieClipLoader を使う利点を挙げるなら、エラーが発生した時の処理ができることでしょうか。 ActionScript では、何かが起きた時、イベントが発生して知らせてくれます。 MovieClipLoader で読み込みを実行すると、エラーが発生した場合に onLoadError というイベントが発生します。この時に実行する処理を関数として予め定義しておきますと、エラーが起きた時にその関数が自動で呼び出されます。 この時に呼ばれる関数は、第1引数にエラーが起きたムービークリップ、第2引数にエラーの種類を表す文字列が渡されます。 次のような要領で利用します。  load_obj.onLoadError = function( target:MovieClip , errorCode:String )  {   //エラーの種類を判別   switch (errorCode)   {    case 'URLNotFound':     /*ここに、ファイルがなかった時の処理を書く*/     break;    case 'LoadNeverCompleted':     /*ここに、不測の理由でロードが失敗した時の処理を書く*/     break;   }  }; ここでは割愛しますが、MovieClipLoader では、リスナーオブジェクトという別のオブジェクトを登録して、そちらでイベントが起きた時の処理を定義することもできます。(ヘルプのサンプルは、このスタイルになっています) 長くなってすみませんでした。 不明な点がありましたら、補足してください。

関連するQ&A

  • Flash CS4 + ActionScript 3.0 で swf

    Flash CS4 + ActionScript 3.0 で swf ファイルを作成しました。 メインのタイムラインの 1 フレーム目に ActionScript で stop(); を 指定したのですが、swf 単体で再生(Adobe Flash Player 10で再生)して 確認したところでは問題なく 1 フレーム目で停止しますが、 swf を HTML に配置してブラウザで確認したところ、 ロード時にはメインのタイムラインがすべて再生されてしまいます。 これについての対処法はあるのでしょうか? 自分なりの調べて見つけた方法としては、 ↓こんな感じだったのですが、根本解決ではない気がするので、  何か良い方法があれば、教えてください。よろしくお願いします。 ・外部ファイルを読み込むだけの swf を作って、  実際に再生したい swf を UILoader に読み込む ・全部ムービークリップに入れてしまって、  メインのタイムラインには、そのムービークリップだけ配置する

    • ベストアンサー
    • Flash
  • Flash5:MCに取り込んだ外部swfの制御について

    Flash5にて作業中です。 長め(タイムラインの量)の外部swfファイルをいろんな場面で使い回したいと思っています。 その全タイムラインを通しで使用する場面もあります。 質問としては、タイトルに記した通りなのですが、 ムービークリップに取り込んだその外部swfファイルを、 ある一定部分(例えば3等分した真ん中)のみエンドレスで再生したりすることは、可能なのでしょうか? 「取り込んだ瞬間、指定のフレームから再生」し、 かつ「指定のフレームから指定のフレームへのアクション制御」は可能なのでしょうか? ご存じの方、よろしくお教え願います。

  • フラッシュのことで質問です

    フラッシュのムービークリップに外部swfファイルを読み込むとき、読み込んだswfの始点をムービークリップの左上(0.0)にしたいのですがどうすればいいでしょうか

    • ベストアンサー
    • Flash
  • フラッシュ・ムービークリップの扱い方

    フラッシュで作った音楽付きSWFファイルが複数ありまして、例えば「A.swf」、「B.swf」」、「C.swf」というふうに順番に再生(ボタン機能は無し)していくような一つのSWFに合体させたいのですが、どのような方法がありますでしょうか? 新規ファイルにそれぞれムービークリップとして読み込んで、タイムラインに並べたのですが、アクションの付け方がよくわからず、全て同時に動き出してしまいます。良い方法がありましたら、よろしくお願いいたします。

  • swfファイルの読み込みについて

    Flash8を使って制作しています。 申し訳ないのですが、Flashに関しての知識は浅いので、説明がわかりにくくなると思います。 メインのタイムラインのムービークリップ「mm」に、 「naka」というファイル内の「turu.swf」をこのようなスクリプトで読み込みます。 on (release) { loadMovie("naka/turu.swf",_root.mm); } とここまではうまくいったのですが、 さらに、「turu.swf」内のムービークリップに「am.swf」というデータを読み込もうとしています。 しかし、turu.swfをメインに読み込まない状態で開くと、「am.swf」は動作するのですが、メインに読み込んだ状態だと、「am.swf」が動作しません。 一度swfファイルを読み込み、その読み込んだswfファイルにさらにswfファイルを読み込むということはできないのでしょうか? また、なにか他に良い方法があれば教えてください。 説明がわかりにくくなってしまい。すみません。

    • ベストアンサー
    • Flash
  • FLASH CS4で外部のSWFファイルを読み込むときについて質問です

    FLASH CS4で外部のSWFファイルを読み込むときについて質問です。 外部のSWFファイルを読み込みたいのですが、そのSWFファイルが複数ある場合、読み込むムービークリップも同数用意しなくてはいけないのでしょうか。 現在読みこまれるSWFファイルが複数あり、読み込む透明ムービークリップは一つしか作成してません。この場合、一度読み込まれたファイルが残ってしまい、他のファイルを読み込んだ時に重なって見えてしまいます。 ムービークリップをSWFファイルごとに用意しなくてはいけないのでしょうか。それとも重なりを防ぐアクションスクリプトコードがあるのでしょうか。

  • Flash lite 1.1での質問です。

    Flash lite 1.1での質問です。 最近Flashをはじめたばかりの初心者です。 とても初歩的な質問かもしれませんが、どなたかご教授頂けると助かります。 <質問内容> メインのswfファイルのルートに配置されているmcというムービークリップを、loadMovie関数で外部swfファイルに置き換えたあと、外部swf内に定義されている変数が参照できません。 (外部のswfには画像データも含まれているので、loadvariables関数は使えません) 【構成】 ・main.swf(メインのswfファイル)   ├btn(main.swfのルートに配置されているボタン)   └mc(main.swfのルートに配置されているムービークリップ) ・gaibu.swf(loadMovieで読み込む外部のswfファイル) 【gaibu.swfのルートタイムラインのActionScript】 msg = "this is gaibu.swf!"; 【やりたいこと】 メインのswfでのボタンアクションで、gaibu.swfをロードし、「action」というルートタイムライン上のラベルに移動します。 on(press) { loadMovie("gaibu.swf","mc"); gotoAndStop("action"); } 「action」に移動した後、ボタンアクションにてloadMovieで読み込んだgaibu.swf内の変数msgを出力したいのですが、何も表示されません。 on(press) { trace(mc.msg); } loadMovie関数を使って外部のswfを読み込むと、(gaibu.swfは色を変えてあるので)読み込みは出来ていると思うのですが、そのswf内で定義されている変数が参照できません。loadMovie関数で読み込んだswf内で定義されている変数は消えてしまうのでしょうか? 分かりにくい説明ですみませんが、宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 外部swfの読込について

    1枚のFlashに二つの外部swfを読み込む方法を教えて下さい。 今参考書を見ながらやってみたのですが外部ファイルが読み込まれていないようで 書き出したswfファイルには何も表示されません。 試した方法ですが・・・ 外部swfファイル読込用ムービークリップを作成、 オブジェクトアクションを挿入 --------------------------------- onClipEvent (load) { function Load (file) {  this.loadMovie (file);   } } --------------------------------- フレームを作成し下記アクション挿入 --------------------------------- contents_mc.Load("about.swf") --------------------------------- 使用ソフトはFlash5です。 どうぞ宜しくお願いします。

    • ベストアンサー
    • Flash
  • 外部swfが「unloadMovieNum」で削除できません。

    外部swfの読み込み再生は出来るのですが、 停止ボタンで外部swfの削除が出来ずに困っています。 play.swfと外部の「bgm1.swf」と「bgm2.swf」があります。 外部swfには、mp3とタイムラインでアニメーションがあります。 play.swfには、下記のように並んでいます。 ●再生ボタン1 ボタンアクション on(release) { loadMovieNum("bgm1.swf",1); } --------------------------------- ●再生ボタン2 ボタンアクション on(release) { loadMovieNum("bgm2.swf",1); } --------------------------------- ●停止ボタン(このボタンがうまくいきません) ボタンアクション on (release) { unloadMovieNum(1); } --------------------------------- FLASH作成ソフトは、Suzuka です。 unloadMovieNumでのswfの削除が出来ずに困っています。 ご回答、宜しくお願い致します。

    • ベストアンサー
    • Flash
  • FLASH MX loadmovie?を使用した外部swfの読み込み・・・?

    FLASH MXのflaファイルの中のムービークリップに外部(ローカル)からswfを読み込みたいのですが わかりません。  わかる方、教えてください。 すみません 丁寧に詳しく 御願いします(^^;)。

専門家に質問してみよう