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ファイルが読み込まれた後の処理 } }
回答を見る
  • ベストアンサー

「swfファイルが読み込まれたら」という条件文をASで書くと・・?

行き詰まってしまいました。 わかる方居られましたら、アドバイスいただけないでしょうか。 例えば、以下のような構成になっていると仮定します。 load.swfという読み込み元のファイルがあって、ボタンが3つ。 それに「loadarea」と名前をつけたMCを、外部swfの読み込み用エリアとして配置しました。 同じ階層(フォルダ内)に ・sample1.swf ・sample2.swf ・sample3.swf 上記のように構成されているとします。 load.swf内の「ボタン1」を押すと、外部swfファイルのsample1.swfが読み込まれるというスクリプト(以下)をボタン1に記述しました。 on(release){ loadMovie("sample1.swf", _root.load_area); } ここからが問題なのですが、 上記のように、外部swfファイルが読み込まれたら何々する(例えば、sample1が読み込まれたら、load.swf内のボタン1のアルファ値を変更する)というようなスクリプトを組みたいんですが、上手くいきません。 if文で記述することは可能なんでしょうか?

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

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

  • ベストアンサー
  • 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

  • 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を実行することは不可能なのでしょうか? ご協力をお願いします。

  • 重たい外部swfのプリロード

    空のmcをステージにおき、そのフレームに、loadMovie();で外部のswfを読み込むまでは、出来るのですが、その外部swfが重い場合なので、プリロード(%)表示させたいのですが、どの場所にどういったscriptが、必要ですか? onClipEvent (data)ハンドラで外部ファイルのロードを待つとかのscriptを書いてるのですが、間違っているのでしょうか?

  • 外部swfの読込について

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

    • ベストアンサー
    • Flash
  • 複数の外部swfを1週間ごとに自動で入れ替えたい

    index.htmlにtop.swfを貼り付けています。 top.swf内loadMovieエリアに、 a.swf~h.swfの8つの外部swfを読み込みたいのですが、 一週間ごとに差し変わるasは、どういう記述をすればよいでしょうか? (つまり2ヶ月ですべて一周するというものです) ちなみにindex.htmlと、全swfは同じ階層です。 よきアドバイスをお願いいたします。

  • フルFlash、swfファイルの読み込みについての考え方(as3.0)

    フルFlash、swfファイルの読み込みについての考え方(as3.0) こんにちは。 Flashのas3.0を始めて半年程度の者です。 長文ですが宜しくお願い致します。 下記のような構造のフルFLASHページを作りたいと考えております。 ■大まかな階層構造 ・index.html(opening.swfを100%で読み込む指定) ・opening.swf(最初に流れるアニメーション。最後のフレームに行くとmain.swfを読み込む指定) ・main.swf(フルFLASH) /// opening.swfの最終フレームに記述 /// stop(); var loader:Loader = new Loader(); var url : URLRequest = new URLRequest("main.swf"); loader.load(url); stage.addChild(loader); 上記の記述でmain.swfを読み込むことは出来るのですが、 アニメーションのopening.swfを非表示にする方法が分かりません。 loader.addEventListener(Event.UNLOAD,・・・); という記述でロードしたswfを非表示にする方法は分かるのですが、 opening.swfは直接index.htmlのタグに埋め込んでいる為、うまく機能しないのではと思っております。 ■私が思いついた対策 ・index.html(background.swfを100%で指定) ・background.swf(とりあえずhtmlに埋め込んでおくswf) ←コレを追加!! ・opening.swf(最初に流れるアニメーション。最後のフレームに行くとmain.swfを読み込む。) ・main.swf(フルFLASH) 上記の階層構造で、background.swfを常に背景感覚で表示させ、 opening.swfもmain.swfもloadで切り替えれば実現は出来るかと思います。 只、この方法が一般的に適切な方法なのかどうか疑問に思いました。 オープニングアニメーション ⇒ フルFLASHという流れをつくるには、どういう作り方が一般的なのでしょうか? 出来ればJSは絡ませず、htmlとflashの指定だけで完結出来ればと思っております。 考え方だけどもご教授頂ければ助かります。 何卒、宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 外部swfのラベル移動

    FLASH MX2004で作成しています。 main.swf上のload_mcのレベル0に、外部swfのA.swfを読み込んでいます。 #main上のフレーム this.load_mc.loadMovie("A.swf", 0); A.swfが終わると同時に、main.swf上のload_mcのレベル1に、外部swfのB.swfを読み込みます。 #A.swfの最終フレーム stop(); _root.load_mc.loadMovie("B.swf", 1); ここまではできています。 その後、B.swf内のcontentsというMC内のラベルをlabel2に移動させたいのです。 #A.swfの最終フレーム stop(); _root.load_mc.loadMovie("B.swf", 1); _root.load_mc.contents.loadMovie("label2"); これができません。 _root.load_mc.contents.loadMovie("label2"); _root.contents.loadMovie("label2"); _root.load_mc.loadMovie("label2"); load_mc.contents.loadMovie("label2"); contents.loadMovie("label2"); なども試してみましたが、うまくいきません。 わたしの頭ではこれが限界です。 ぜひともお力お貸しください!

  • 外部swfファイルの閉じ方

    メインに"stage2というmcを配置し、123.swfを読み込むボタンを配置しました。 ボタンスクリプト: on (release) { _root.construction(); loadMovie("123.swf", "_root.stage"); _root.stage.swapDepths(5); for (i=1; i<=4; i++) { _root["m_"+i]._visible = false; } 開いた外部swfファイルを閉じる設定をしたいのですが、どのようにすればよいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 外部から読み込んだSWFファイルがサイズオーオーバー

    初めて質問させていただきます。 質問内容はloadMovieを使って外部からSWFファイルを読み込んでいたのですが、こちらの希望しているサイズに収まってくれません。 (1)740×370SWFファイル(メイン画面) (2)740×270SWFファイル(読み込まれる画面) の2つがあり(1)に(2)を読み込ませるように on (release) { _root.display.loadMovie("alice_pro.swf"); } というふうに記述して読み込んで作動するのです。 しかし、(2)の表示サイズが740×270ではなく、(2)の作成のすべてのオブジェクトが表示されて、希望の枠((2))の中に納まってくれません。 状況: 1、WinXP 2、FlashMX 3、(1)と(2)のSWFファイルは同じフォルダの中 4、loadmovieは機能する 5、(1)の画面に(2)を呼ぶためのボタンを作成し、スクリプトを記入しています。 6、中心点も(1)画面の左上端の置いており、そこを基点として表示されます。 問題点: (2)のSWFファイルが作成時に設定した740×270の枠からはみ出たオブジェクトも表示されるので、これを740×270の画面の中だけを表示させたい。 回りくどくなりましたが、一番やりたいことは(2)画面の中にきれいに収めたいということです。 ご面倒かけてすみませんが、皆さんのスキルを賜りたいと思います。よろしくお願いします。

    • ベストアンサー
    • 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
  • AS3.0による外部swfの制御

    AS3.0による外部swfの制御 質問させていただきます。 やりたいと事は、メインとなるswfのボタンを押して、 読み込んだ外部swf(stopしている)を再生(play)したいと考えております。 メインのswfはAS3.0、読み込む外部swfはAS2.0になります。 環境はFlash CS3です。 以下がスクリプトになります。 //swf読み込み配置 var loader_obj : Loader = new Loader(); var url : URLRequest = new URLRequest("test.swf"); MovieClip(root).loader_obj.load(url); loader_obj.y = 3 loader_obj.x = 392 stage.addChild(loader_obj); //swfボタン制御 btn.addEventListener(MouseEvent.ROLL_OVER,btn_play); function btn_play(event:MouseEvent):void {MovieClip(root).photo.gotoAndPlay(2);//メインswfのムービーリップも動かす <--ここに外部swfを参照するスクリプトが入ると思うのですが・・・-->gotoAndPlay(2);//外部swfの2フレーム目から再生 } 肝心の所のスクリプトはわかりません・・・ 宜しくお願い致します。

    • ベストアンサー
    • Flash

専門家に質問してみよう