• ベストアンサー

Flash4でloadMovieの完了を知る方法

Flashムービーを、Flash4形式で作成しています。 あるムービークリップに、loadMovieで、JPEG画像を読み込んでいます。 ロードが完了すると、うまく表示されます。 この、ロードが完了したタイミングを知りたいのですが、可能でしょうか? MovieClipLoaderクラスや、getBytesLoaded()メソッド、fscommand2は、 Flash4では使えないようなので、困っています。 よろしくお願い致します。

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

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

「Flash4」 と,「書かれいるアクション」 は矛盾しています。 ご使用のバージョンは Flash 5 以降で, Flash Player 4 用のSWFをパブリッシュしたいというご質問なのでしょうね。 しかし何でまた??? Flash Lite 1.0 だと,そもそも loadMovie 自体ができないでしょう。 ですから携帯用 SWF も有り得ないような気がしますし。 それにそもそも Flash Player 4 では,JPEGのロードはできませんよ。 Flash Player 4 では SWF(ムービー)のロードしかできません。 また SWF(ムービー) をロードする関数だから loadMovie なのです。 Flash Player が進化して,外部JPEGがロード表示可能になったのは, Flash Player 6 以降です(Flash MX 以降)。 オーサリングツール Flash 4 や Flash 5 で作成した SWF であっても, 閲覧する Flash Player が 6 以上であればJPEGのロード表示は可能ですが, どのバージョンで作成しようとも, Flash Player的にはFlash Player 5 以下では JPEG のロード表示はできません。 Flash Player 5 以下で, JPEG をロードする場合は,一度 Flash のステージ上に JPEG を読み込んで, SWF としてパブリッシュしたものをロードしなければなりません。 そういう前提で一応回答します。 ================= 今だと MovieClipLoaderクラス というのがあって, その MovieClipLoaderクラス のインスタンスを作成して,ロードを監視しますよね。 根本原理はそれと同じでできると言えばできます。 MovieClipLoaderインスタンスモドキ を ムービークリップで自作するわけです。 上述の通り,Flash Player 4 では,JPEGのロードはできません。 ですからまず, 外部SWFの準備からです。 JPEG と同じステージサイズのドキュメントを作成し, JPEG をステージ上に読み込みます。 そして,次が仕込みのポイントですが, フレームを 2フレーム にします。 そして,フレーム1 でも フレーム2 でもどちらでも良いので, --------------- stop(); --------------- を書いて無駄な動きをさせないようにしておきます。 stop() は必ずしも必要ではありませんが, "フレーム2 まで作成する" ということは必須です。 そして,SWF をパブリッシュします。 「swf_jpeg.swf」というファイル名でパブリッシュしたとしておきます。 当然,この SWF 自体をパブリッシュする設定も, Flash Player 4 の SWF をパブリッシュする設定にしてください。 実験検証のため私も作成しましたが, 20.2 KB (20,755 バイト) のJPEGをステージに読み込んで 何も設定せずに SWF をパブリッシュすると 20.3 KB (20,872 バイト) になりました。 容量的にもそんなに増えるわけではないので問題ないと思います。 次に, 本題の読み込む側の Flash の作成です。 ロードするムービークリップと,ロードを監視するムービークリップの2つが必要です。 まずロードするムービークリップを作成して, このムービークリップにインスタンス名を付けます。 「load_mc」 というインスタンス名を付けたとしておきます。 この 「load_mc」 内のフレーム数は 1フレーム のみにしておいてください。 そして, この load_mc に外部 SWF がロードされたかどうかを監視するムービークリップを作成します。 まずステージ上に小さなもしくは空のムービークリップを作成します。 そして, その小さなもしくは空のムービークリップをダブルクリックして, ムービークリップ内のタイムラインの編集に入ります。 このムービークリップ内のフレームは 3フレーム にして, それぞれをキーフレームにします。 ここまでを階層図にすると  _root   ├ load_mc(内部フレームは 1フレーム)   └無名のMC(内部フレームは 3フレーム) となるということです。 そして, 3フレームある無名のMCの フレーム1 には次のようなスクリプトを書きます。 -------------------------------- // swf_jpeg.swf を _root.load_mc にロード loadMovie("swf_jpeg.swf", "/load_mc"); -------------------------------- ドットシンタックスによるパスではなく, スラッシュシンタックスパスでターゲットを表記します。 フレーム2 には次のようなスクリプトを書きます。 -------------------------------- // ロードされたフレームが2であれば if (getProperty("/load_mc", _framesloaded) == 2) { // 実際は何かを動作させる trace("ロード完了"); // そして ストップ stop(); } -------------------------------- 上のスクリプトの1行目 if (getProperty("/load_mc", _framesloaded) == 2) の部分は, if (/load_mc/:_framesloaded == 2) としても一応は動作します。 そういう変な書き方は私はあまり好きではないので, 順当に getProperty 関数を使用しています。 またなぜか, if (_root.load_mc._framesloaded == 2) でも動作しますが, スラッシュシンタックスとドットシンタックスの混在は混乱の元となりますから, やはり無難で順当な if (getProperty("/load_mc", _framesloaded) == 2) が良いと思います(私は)。 フレーム3 には次のようなスクリプトを書きます。 -------------------------------- gotoAndPlay(2); -------------------------------- つまり, フレーム2 まである swf_jpeg.swf が最終フレームである フレーム2 まで読み込まれるまで, このムービークリップ内のタイムラインは, フレーム3 と フレーム2 をループするわけです。 実際にはフレーム3 が表示されることはないので フレーム2 が連続実行されます。 そして,/load_mc(_root.load_mc) のフレームがフレーム2までロードされた時点で, trace("ロード完了"); が実行されて stop() します。 loadMovie を実行させるところまで, このムービークリップにさせていますが, loadMovie をボタンなどで実行する場合は, この 外部 SWF がロードされたかどうかを監視するムービークリップ内のタイムラインは フレーム2 までにして, フレーム2 と フレーム3 のスクリプトを順次前フレームに移動させるなどの対処をしてください。 かなり原始的な方法だと思われるかもしれませんが, 作成がややこしいだけで,スクリプトや仕組みは単純明快でわかりやすいと思います。 結局, この Flash 4 あたりのスクリプトが便利になったのが今のバージョンです。 極端に言うと,  今のバージョンは  仕組みをすべて手作りする必要がなくなっただけで  できることは Flash 4 と大して変わらない。 と言えなくもない気がします。 全部できるわけではありませんが,工夫次第で結構なことはできます。 Flash 4 では, なんでもかんでも自作ですから面倒は面倒ですけどね。 スクリプトだけで解決するのではなく, ムービークリップのタイムラインと gotoAndPlay や stop を大いに活用することです。

mozori01
質問者

お礼

丁寧なご回答ありがとうございます。 仰るとおり、Flash8 で Flash4形式のパブリッシュをしています。 再生予定のPlayerは最新を想定していますので、JPEGのloadMovieによる表示は可能という前提でした。 ・こちら側の事情で、どうしてもFlash4以前の形式で書き出したかったこと。 ・ドラッグをサポートしたいためにLite形式では書き出せなかったこと。 が背景にあります。 BlurFiltan様の方法、とても参考になりましたが、 読み込むJPEG画像は、サーバ側で動的に生成されるため、 JPEGを読み込んだSWFをあらかじめ作成しておく事ができません。 そのため、直接JPEG画像をロードしています。 読み込まれるMCがロード中などのプロパティを取得するなど、 なにか方法はありませんでしょうか?

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1ですが, ハッ??? ますます意味不明ですね。 Flash Lite は考えないのでしょう。 そして JPEG をロードする時点で Flash Player 6 以上が必要なわけです。 ですからその時点で Flash 4 などにこだわる必要がないと思うのですけど。 Flash4形式にする意味がないと思います。 ~・~・~・~・~・~・~・~・~・~・~・~・~ 意味がわかりませんが一応方法案。 外部JPEGのファイル名称を「my_jpeg.jpg」だということにしておきます。 JPEG をロードするムービークリップを極小さくまたは空のムービークリップとして作成します。 インスタンス名は 「load_mc」 としておきます。 そしてロードリスナー用の, 内部フレームが3フレームのムービークリップのフレーム1には次のように書きます。 ------------------------------ loadMovie("my_jpeg.jpg", "/load_mc"); ------------------------------ フレーム2には次のように書きます。 ------------------------------ if (_root.load_mc._width>10) { // 実際には何か違う動作をさせる trace("ロード完了"); stop(); } ------------------------------ フレーム3には次のように書きます。 ------------------------------ gotoAndPlay(2); ------------------------------ こんな感じではいかがでしょうか。 最初用意するロード用ムービークリップは,極小さいかもしくは空です。 JPEGがロードされるとそのムービークリップはJPEGの大きさになります。 おそらく横幅は 10px 以上あるでしょう。 ですから if (_root.load_mc._width>10) にしています。 書いてはみましたが, Flash Player 4 では閲覧不可能なので実際には動作しません。 (動作しないという断言は初めてです。) Flash Player 6 以降では無事に動作すると思います。 ~・~・~・~・~・~・~・~・~・~・~・~・~ JPEG のロードは Flash Player 6 以上が必要なわけですし, せめて Flash Player 6 以上では考えられないものでしょうか。 あとドラッグの件も, on(release){} など onイベントハンドラは, Flash 5 以下ではボタンにしか書けないわけです。 一方 stratDrag などはムービークリップに対するスクリプトです。 ですからムービークリップの中にボタンを入れて, ボタンごとムービークリップをドラッグするというような妙なこともしなければならないので大変です。 Flash Player 6 までは MovieClipLoader は使えませんが, Flash 5 以上だと onClipEvent ハンドラが使えますよね。 JPEG のロード完了くらいでしたら, ムービークリップの onClipEvent(load){ } で取れます。 また, onClipEvent(data){ } で各データセクションが読み込まれるたびに何かを実行できます。 すごく楽ですけどね。

mozori01
質問者

お礼

ご回答ありがとうございます。 横幅を監視する方法、使えそうですね。 思いつきませんでした。試してみます。 なぜ、Flash4なのか?と疑問をお持ちになられるかと思いますが、 ・flaファイル編集はFlash8 ・パブリッシュ形式はFlash4 ・FlashPlayerは6以降 という状態なのですが、 パブリッシュをFlash4形式にしている理由は、こちらの事情としかいいようがありません。 (作成したFlashを自作のツールに通すときにFlash4形式でないと都合が悪い。) また、ドラッグについては、 ボタンイベントから、直接ムービークリップに対してドラッグスタートを発行し、うまく動いています。 質問内容について、うまく解決できそうです。 度々のご回答ありがとうございました。

関連するQ&A

  • Flash 8BasicでloadMovieを使う時

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

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

    ムービークリップにloadMovieで1.jpgをロードし、それをボタンにしたいのですが、下のスクリプトではうまく動作しません。 menu01_mc.loadMovie("1.jpg"); menu01_mc._xscale=10; menu01_mc._yscale=10; menu01_mc.onRelease = function(){ gotoAndStop(5); } 最初のloadMovieの部分をなくし、 menu01_mc.onRelease = function(){ gotoAndStop(5); } とするとちゃんと動作します。 loadMovieしたムービークリップはボタンにできないのでしょうか? FlashCS3、actionscript2.0で作成しています。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • loadMovieの読み込み中を表示しない

    Flash Mx 2004です。 ムービークリップにloadMovieで外部画像を表示し、その上にボタンをのせているのですが、画像が出るまでの間ボタンだけが表示されている状態になっています。画像とボタンを同時に表示するにはどうしたらいいのでしょうか?このムービークリップは5フレーム目にあります。 以下の2種類の方法をためしてみましたがうまくいきません。どちらの方法でもまた別の方法でもよいのでよろしくお願いします。 ●読み込み後のフレームへ移動 このムービークリップは別画像をクリックしたら表示されるようにしているので、その画像のアクションに on(release) { _root.gotoAndPlay(6); //5フレーム目の次を表示 } と記述したのですが、これだとなぜかloadMovieの読み込み画像が出ません。 ●最初から読み込んでおいて非表示にしておく ムービークリップを1フレームに配置し [レイヤー名またはインスタンス名]._visible=false; としたのですが非表示になりません。

    • ベストアンサー
    • Flash
  • 1フレーム~5フレームまで表示されなくなったのは。。。

    こんにちわ毎回お世話になっております 新しいフラッシュを作ったのですが 前回のフラッシュにしようしたロード画面を 使いまわしました。 ムービークリップ自体には onClipEvent (load) { _root.stop(); } onClipEvent (enterFrame) { if (100 == Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)) { _root.gotoAndPlay(5); } } onClipEvent (enterFrame) { this.gotoAndStop(Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)); } と前回同様記述しました。 しかし今回はロード画面がでず 白紙の画面のまま読み込みが完了し そのままフレーム5に進んでしまっています。 何回もやりなおしたのですが どうしても白紙のまま読み込んでしまいます。 これはFLA自体が破損?したのでしょうか? 非常に困っています。 なにかアドバイスがありましたらお願いいたします。 別のロードムービーを作ったものの 白紙のまま読み込みされました。。。 FLASH8 WIN XP使用です。

    • ベストアンサー
    • Flash
  • 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
  • Flash5のloadMovieについて

    FLASHを勉強し始めましたが、本を見ながらやってもどうしても上手く いきません。 したい事は、同じ画面の右側にボタンを配置し、クリックするとその左側にある 四角の枠内に違うムービーファイルを表示させたいんです。 でも、全然違うところに表示されちゃって・・・。 ・ソフトはFLASH5 ・アクションは、 on (press){ _root.インスタンス名.loadMovie("他のムービーファイル名.swf") ; } (同じディレクトリに、ファイルは保存してあります) どうしてでしょうか??教えてください!

  • loadMovieで特定のフレームを表示したい

    お世話になっております。 loadMovieで別のswfを読み込むことができますが、読み込んだファイルの特定のフレームを表示させたいのです。 たとえば、a.swfにb.swfをloadMovieします。 a.swfには3個のボタンがあり、それぞれがb.swfの1フレーム、10フレーム、20フレームに対応します。 ひとつのボタンに、 on (release) { this.loadMovie("b.swf"); this.gotoAndStop(10); } としても表示されないのはなんとなく理解できますので、 a.swfにムービークリップ(インスタンス名load_mc)を作り、その中にロードするようにし、さらにa.swfの5フレーム目にload_mcの10フレーム目を表示するように書きました。 ボタンに on (release) { this.load_mc.loadMovie("b.swf"); this.gotoAndStop(5); } 5フレーム目に this.load_mc.gotoAndStop(10); やはり、うまくいきません。 私の考え方が悪いのでしょうか? どうすればいいですか? どなたかよろしくお願いします。m(__)m WinのFLASH8使用です。

    • ベストアンサー
    • Flash
  • 携帯のFlash待受の月を英語3文字にしたい

    携帯Flash待受の「月」を英語3文字にしたい Adobe Flash CS3 Mac OSX版 Flash Lite2.0にて作成 仕事の都合で、Flash待ち受けを独学でつくっています。 日付表記の部分で6月25日を「06/25」と表示していたところ、「Jun 25」にしてほしいといわれました。 そこで今まで使っていた数字の「number」というムービークリップと入れ替える形で「month」というムービーを作成し、 stop(); Month = fscommand2("GetDateMonth"); switch (month) { case 0 : gotoAndPlay(2); break; case 1 : (以下略 1月はJanというグラフィックシンボルを2フレーム目に入れ、同じように2.3.4月と順番に13フレームまで入れましたが動きません。 なにか根本的なところで間違っているような気はするのですが、参考に出来るところも見つからず困っています。どなたかご教授おねがいします。

  • 外部jpeg読込み

    外部jpegを読込用 ムービークリップ"img"に対して外部jpegを読み込もうとしています。 ムービークリップに直接loadMovie(Path)として画像を読み込んで、そのムービークリップのアクションで onClipEvent (load) { this._width = 100; this._height = 50; } とサイズを指定しています。 このサイズを指定しているアクションを_rootステージのアクションスクリプトレイヤーに置き換え直接書きたいのですが方法はないのでしょうか? ご教授ください。

    • ベストアンサー
    • Flash
  • loadMovieで読みこんだswfから音が出ない

    Flashのオープンソースであるページめくり(http://pageflip.hu/pageflip2/index.phpからダウンロード。)ファイルを空のムービークリップに(clip_mc)外部ファイルのswfとして読み込ませてプレビューしてみたのですが、読み込ませるとページをめくる音が出ません。 //空のムービークリップのactionは clip_mc.loadMovie("pageflip_v225 2.swf"); 複数の本を入れ替わり読み込ませる形を取りたいのでこうしようと思ってるのですが、音が出ないとリアル感がないのでなんとか音が出るようにしたいのですがどうすればよいでしょうか。(pageflip_v225 2.swfのプレビューは音が出るのは確認済み。loadMovieさせると音が出ない) ちなみに簡単な音の出るボタンを配置した外部swfは音が出るので、このpageflip_v225 2.swfに何か問題があるのかとも思ったのですが、何ぶんプログラムをまるで分かってないので対処に困っております。 どなたかお分かりの方がいらっしゃいますでしょうか?

    • ベストアンサー
    • Flash

専門家に質問してみよう