• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「swfファイルが読み込まれたら」という条件文をASで書くと・・?)

ASでswfファイル読み込み条件を記述する方法

このQ&Aのポイント
  • ASを使用してswfファイルが読み込まれたら何をするかを設定したい場合、if文を使用することが可能です。
  • 例えば、load.swf内のボタン1が押された時に外部swfファイルのsample1.swfを読み込む場合、以下のスクリプトを使用します。
  • on(release){ loadMovie("sample1.swf", _root.load_area); if(_root.load_area._url == "sample1.swf"){ // swfファイルが読み込まれた後の処理 } }

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

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

まず、読み込まれる sample○○.swf ファイルの方ですが。 Flash は全フレームが読み込まれなくても、読み込みの済んだフレームから順次再生されていく設計になっています。 また、メインのタイムラインが止まっていてもムービークリップのタイムラインは動きますし、フレーム1にサウンドが入っている場合はフレーム1が再生された時に音が鳴ってしまいます。 loadMovie で読み込む場合も同じですから、load.swf ファイルの方で完全に読み込まれるまで停止させておきたい場合は、この特性を何とかしなければなりません。 一番簡単な対策は、sample○○.swf の最初のフレームを空白のキーフレームにして、stop(); でタイムラインを止めておくことです。 ある程度容量のあるファイルでしたら、sample○○.swf に普通のムービー同様に Now Loading 画面を作っておくのも1つの方法です。 ただし、_root の getBytes*** メソッドを使うと load.swf に読み込まれた時に load.swf の容量を取得してしまいますので、this.getBytes*** というように相対的に書くか、Flash MX 2004 以降をお使いの場合は _lockroot で _root の指す対象を保護してください。 ----------------------------------------------------------------- 読み込み完了を待つ方法は読み込み方によって様々なやり方がありますが、loadMovie を使うなら、ムービークリップの data イベントを使う方法が簡単で無難です。 data イベントは loadMovie か loadVariables で外部からの読み込みを実行した時に発生します。 読み込み完了後にボタンを薄く表示するには、どのボタンがクリックされたのかはムービークリップ load_area 側では分かりませんから、これは変数に記録を取っておきます。 あとは data イベントの中で getBytes*** メソッドを使って読み込み進捗状況を監視し、100 %に達するまで待ってボタンのアルファを操作するだけです。 load.swf には、ステージにムービークリップ load_area と読み込みを開始するためのボタンインスタンス btn1 ~ btn3 があるとします。 外部ファイルの読み込み終了後にクリックされたボタンを薄く表示するスクリプトは、大体、次のようになります。 このスクリプトはフレームと、各ボタンおよびムービークリップ load_area のインスタンスに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  ●フレームに設定するスクリプト  //クリックされたボタンの参照を保持  clicked_btn = null;  ●各ボタンに設定するスクリプト  ( btn1 の例です。他のボタンでは番号を変更してください)  on(release)  {   //クリックされたボタンの参照を保存   _root.clicked_btn = _root.btn1;   //外部ファイルを読み込む   loadMovie( "sample1.swf" , _root.load_area );  }  ●ムービークリップ load_area に設定するスクリプト  onClipEvent(data)  {   //読み込み完了率を算出   loaded = this.getBytesLoaded();   total = this.getBytesTotal();   per = Math.floor( loaded / total * 100 );   //読み込み完了後の処理   if( per >= 100 )   {    //外部ファイルのタイムラインを動かす    this.play();    //クリックされたボタンを薄く表示する    _root.clicked_btn._alpha = 30;   }  } loadMovie で読み込んだ時は、data イベントは読み込みが完了するまで数回にわたって発生します。 何回発生するかは環境によって異なります。 1回もしくは2回くらいしか発生しないこともありますので、load.swf ファイル側で sample○○.swf のプログレスバーを表示したい場合は data イベントは不向きです。 (イベントが常時発生しないために、バーがリアルタイムに伸びていく様子が見えません) しかし、読み込みの完了を待ちたいだけなら data イベントでも対応できます。 プログレスバーを load.swf 側で用意する方法もあるにはあるのですが、sample○○.swf 側に付けておくのが一番簡単だと思います。 ただし、この場合は先述の通り、外部 swf ファイルでは _root の指す対象が変わる点にご注意ください。 Flash MX 2004 か Flash 8 をお使いでしたら、loadMovie を強化した MovieClipLoader というクラスもあります。 MovieClipLoader では読み込みの各段階で様々なイベントが発生し、状況を細かく把握できます。 読み込みの完了を待って何かをするには、onLoadInit というイベントを利用します。 MovieClipLoader はこのサイトでもたびたび話題になっています。 興味がありましたら調べてみてください。

taka2007
質問者

お礼

御礼が遅くなり大変申し訳ありません。 詳細なアドバイス本当に有難うございます。 じっくり読んで参考にさせていただきます。

関連するQ&A