• ベストアンサー

loadMovieを使った場合のプリローダー

loadMovieを使ってJPG画像を読込む際に、プリローダーはつけれないものでしょうか。。 一旦、別にSWFファイルを読込ませるような考え方になるのでしょうか・・ 何卒、宜しくお願い致します。m(_ _)m

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

  • ベストアンサー
noname#35109
noname#35109
回答No.1

ご質問の意図がいまひとつわかりませんし, Flash のバージョンがわかりませんが, >> loadMovieを使ってJPG画像を読込む際に、 >> プリローダーはつけれないものでしょうか。 このプリローダー というのは, 「NowLoading....」 とか 「読み込み中...」 とかいう表示のバーのことでしょうか。 それなら普通に付けられますよ。 読み込む手段と,読み込まれたバイト数などを知ることは別問題です。 単純に言えば, _root に対するプリローダの場合, this.getBytesLoaded()/this.getBytesTotal()*100; のようなもので,自分自身(_root自身)のバイト数を算出しますが, これを, ロードするMC.getBytesLoaded()/ロードするMC.getBytesTotal()*100; のように,算出するターゲットを変えれば良いだけです。 あと気を付ける点は, 読み込むムービークリップに,まだ何も読み込まれていない状態のときも, そのムービークリップはステージ上に存在していますから, そのときのバイト数を計算しないようにすることくらいだと思います。 ------以下は例です------ 例えば,1フレームだけの SWF があって, その SWF に,外部の JPEG(例 「gaibu.jpg 」 )を読み込むとします。 まず, ステージ上に空(カラ)もしくは小さなムービークリップを作成し, そのムービークリップに 「myMC」 というインスタンス名を付けます。 それより上のレイヤーに, 横長い長方形の塗りを用意します。  ■■■■■■■■■■■■■■■■ ↑こんな感じで適当な色の適当な塗りです。 その塗りを選択して,右クリック→「シンボルに変換」でムービークリップシンボルに変換します。 そのとき,「シンボルに変換」ダイアログが出てくると思いますが, そこで,基準点を左上にしておきます。 ------------------------------------------  名前(N): [シンボル1     ]  タイプ(T): ◎ ムービークリップ  基準点(R): ■□□         ○ ボタン                □□□         ○ グラフィック             □□□ ------------------------------------------ この状態で「OK」します。 これで,左は固定で右に伸びる棒ができます。 ここまでのムービーの階層構造を図にすると次のようになります。  _root   ├ プリローダ(インスタンス名 特になし)   └ 読み込むMC(インスタンス名 myMC) そして, _root(メインムービー)の フレーム1 に, ----------------------------------- _root.myMC.loadMovie("gaibu.jpg"); ----------------------------------- と書いて,myMC に外部ファイル「gaibu.jpg」をロードします。 プリローダのMCには次のように書きます。 ------------------------------------- // このプリロードバーが表示されたとき onClipEvent (load) { // このバーの横長さを 0 にする this._xscale = 0; } onClipEvent (enterFrame) { // 読み込むMCのロードバイト数を取得 var loaded = _root.myMC.getBytesLoaded(); // 読み込むMCの総バイト数を取得 var total = _root.myMC.getBytesTotal(); // もしロードバイト数が総バイト数に満たなければ if (loaded<total) { // このバーを表示にする this._visible = true; // このバーの横長さを読み込まれた%の長さにする this._xscale = (loaded/total)*100; // それ以外でトータルバイト数100以上のとき() } else if (total>100) { // このバーを非表示にする this._visible = false; } } ------------------------------------- 特に大変なことはしていないと思います。 _root は 1フレームしかないという勝手な条件で考えたので,  // このバーを表示にする  this._visible = true;  // このバーを非表示にする  this._visible = false; が出没しているだけで, _root が複数フレームある場合, 次のフレームに進ませて,そのフレームではプリローダを消しておけば, こういった処理は不要になります。 どんなものをプリローダと考えていらっしゃるのかもよくわかりませんし, 今現在使われているものと違うものである可能性は大大ですが, とりあえず,こういうものであれば loadMovieを使ってJPG画像を読込む際に,プリローダーはつけられるという例です。 一応上の例は, Flash 8 の 「ダウンロードのシミュレート」を使って動作確認はしています。 スクリプト自体は Flash 5 以上で作成可能です。 しかし,JPEG を表示できるのは Flash Player 6 からです。 ただし,プログレッシブJPEG は Flash Player 8 以降でないとロードできません。 Flash は元から バージョン によってできることや出来ないことや仕様が変わりますが, JPEG のロードは特にバージョン問題がややこしいです。

nanakkko
質問者

お礼

sassakun様 解答有難うございます。 FlashのVerはMXです。 プリローダーの意味はお察しの通りです。 説明不足で申し訳ございません。 なるのどですね・・・_rootをMC名にすればいいのですね! 早速今からテストしてみようと思います。 取り急ぎお礼まで^^ 本当に有難うございました。

nanakkko
質問者

補足

す、すみません、教えていただいたスクリプトで実践してみたのですが‥うまくいきません;; MXじゃ無理なんでしょうか; ストリーミングのデータ表示で ・サイズ 0KB(432b) とでて、読込んでる写真サイズを認識しません。 結果、読込んでる最中は真っ白になります;; (教えていただいたスクリプト使用) 【myMC内】 _root.myMC.loadMovie("gaibu.jpg"); 【%表示MCに記述】 onClipEvent (load) {  this._xscale = 0; } onClipEvent (enterFrame) {  var loaded = _root.myMC.getBytesLoaded();  var total = _root.myMC.getBytesTotal(); if (loaded<total) {  this._visible = true;  this._xscale = (loaded/total)*100; } else if (total >100) {  this._visible = false; } } フレームは1フレームのみです。 何度も申し訳ございませんが、何卒ご教授お願い致します。

その他の回答 (3)

noname#35109
noname#35109
回答No.4

#1&2&3です。 すみません。#3の投稿をミスってしましました。 #3では, お礼も,自己紹介(#1&2です。)も書かずに,いきなり変な所から始まっていますが, 原稿のコピペミスです。 #3の頭に下記を追加して読んでやってください。 ---------------------------------------- #1&2です。 >> コ、コレです! >> わたしもこーなります。 やっぱりそうなのですね。 貴重な回答ありがとうございました。 初めて他の方の情報を得ることができました。 回答者なのに,逆に質問してしまったみたいな形になってすみません。 ありがとうございます。 長年の深層の疑問が晴れた感じがします。 ------------------------------ これが抜けていました(謝)。

noname#35109
noname#35109
回答No.3

>> やはり8はいいんですねぇ‥ そうですねえ, loadMovie とは別の意味で Flash 8 はすんごく良いです。 体験版使用の時点ですでに涙が出そうでウルウルでした。 Flash MX→ Flash MX 2004 のバージョンアップって, ハッキリ言ってほとんどプログラム(ActionScript)のバージョンアップだけだったと思います。 外部 AS が使えるようになったり, ActionScript2.0 になってクラスの定義ができるようになったりと, プログラマが泣いて喜ぶバージョンアップという感じですかね。 それにともなって,アクションパネルのノーマルモードなんかも無くなって, 悪く言えばFlashがアブノーマルな世界に逝ってしまうのかなという感じがしました。 Flash MX 2004 → Flash 8 のバージョンアップは違います! できる絵や読み込めるファイル形式も増えましたし, 線の末端の形状や線にグラデーションがかけられたり, その他,ブラー,グロー,ドロップシャドウ…・・・ デザイナーが泣いて喜ぶバージョンアップという感じです。 おまけに,アクションパネルのノーマルモードも復活しましたし, なんと,モーショントゥイーンにもすごいカスタムイージングがかけられるようになったーーー! という具合ですごいです。 何処かへ逝ってしまいそうだった Flash が, 民衆の前にグレードアップして帰ってきたウルトラマン。 という感じで涙ウルウルです。 Flash って元から アニメ や アプリケーション という, いわゆるFlash(SWF)を作る以外でも, ロゴやボタンや地図の作成や写真の合成や…・・・ 何でしたらワープロ代わりに使ったり, 社内や校内や町内配布掲示用レベルでしたら, パンフレットやポスター・リーフレットの作成までも… 何でも作れますよね。 私はワードのオートシェイプまで Flash で作っています(WMFで書き出す)。 元から結構オールマイティーなソフトですが, Flash 8 ではそのパワーがさらに充実したという感じです。 Flash が苦手としていた JPEG など ビットマップ系 画像でも面白い効果が付けられるようになりました。 もし買い替えられるお金と気持ちがあるなら, アップグレードして決して損にはならないバージョンだと思います。 -------------------------------- しかし, 買い換えとスクリプトがうまく行かないのは別問題で…。 なんでうまく行かないのでしょう??? ちょっと思い当たる点はここですが… if (loaded<total) { this._visible = true; this._xscale = (loaded/total)*100; // ★ココがアヤシイ↓★ } else if (total>100) { this._visible = false; } total>100 の 100 は 100Bytes の 100 で,私が勝手に 感 で入れた数値です。 この数値で何をしているのかというと, JPEG が読み込まれる前の 素 の myMC のバイト数を表示ないようにしてあるのです。 素 の myMC のバイト数は 100バイト 以下であろうと推測されるため, もし myMC のバイト数が 100 以下であった場合は, this._visible = false; が動作しないようにしてあるのです。 もし 素 の myMC のバイト数が 100 を越えていたら this._visible = false; が動作してしまいます。 原因はここかもしれないと思って, myMC の中に 画像を入れてわざと重くして実験してました。 最初の段階は様子が変ですが,結局 if (loaded<total) { this._visible = true; これで this._visible = true; が実行されるのでやはり, 棒は正常に見えてちゃんと動きます…困った。 なんでうまく行かないのでしょう??? ムムムム...わかりません。 わからないので,やはりFlash 8 に買い替えましょう(爆)! これは冗談ですが,わからないことは事実です。 すみません。

noname#35109
noname#35109
回答No.2

#1です。 返事がすっかり遅れてしまったようですみません。 Flash MX を使用して, #1の補足で書かれているスクリプトを, インデントの為の全角空白文字6個は削除して, 【%表示MC】にコピペし, アップロードして検証してみましたがうまく行きましたよ。 当たり前の確認なのですが,  _root   ├ プリローダ(インスタンス名 特になし)   └ 読み込むMC(インスタンス名 myMC) という感じに, myMC と プリローダ は独立して存在させていらっしゃいますよね。 myMC の中に プリローダ を入れてしまった場合は,当然プリローダは表示されませんよ。 図示するとこういうことですが↓。  _root   └ 読み込むMC(インスタンス名 myMC)       └ プリローダ(インスタンス名 特になし) これでは,myMC に 「gaibu.jpg」 が乗っ取られてしまって, プリローダも吹っ飛びます。 また, myMC と プリローダ は独立して存在させていらっしゃるという前提で, インスタンス名の付け忘れとか,階層(_root の直下に myMC を置く)の間違いもありませんよね。 また, プリローダの方を上のレイヤーに置いていますよね。 上記は多分大丈夫だと思いますが, 一応の確認です。 -------------------------------- Flash MX の場合は, Flash 8 の 「ダウンロードのシミュレート」とは呼び方が違い, #1の補足で書かれている通り, ムービープレビューから「ストリーミングを表示」になりますよね。 実はこの機能, 私の Flash MX 環境では loadMovie に限ってうまく動作しないのですよ。 Flash MX な頃, loadMovie の場合も「ストリーミングを表示」が有効になるのかならないのか, 他の方に聞いてみたかったのですが, そういう質問をしないまま,現在に至っています。 だから,私の環境だけ, Flash MX の loadMovie に限って「ストリーミングを表示」がうまく動作しないのか, 他の方の環境でも動作しないのかがわかりません。 違う PC にもインストールしてみましたが, その PC でも loadMovie 時の 「ストリーミングを表示」はうまく動作しません。 うまく動作しないと言うのは, どんなに重い外部ファイルでも, ほとんど瞬時に表示してしまうということです。 ですから,Flash MX を使っていた頃,loadMovie の検証をする場合, 実際にアップして,どのくらいで表示されるのかとかを検証していました。 今回も,実際に500KBくらいの「gaibu.jpg」を作って, アップロードして実験してみましたら,うまく動作しました。 (回線が早いので,500KB と言っても 2~3フレーム分の時間しかかからないので,なんとか棒が伸びているのが一瞬わかるという程度ですが。) 一度実験をすると, 次回からはキャッシュを参照するようなので, 実際,【myMC内】 には次のように書いて検証してみました。 var rannsu = Math.floor(Math.random()*100000); _root.myMC.loadMovie("gaibu.jpg?hikisu="+rannsu); 普通はこんな変なスクリプトにする必要はありませんよ。 gaibu.jpg の キャッシュを参照しないように, ファイル名の後に, hikisu="+59213 のようなランダムな引数を与えただけです。 ------------------------------------ とにかく, 0の状態から Flash MX で作成しても,プリローダはちゃんと動作しました。 ただし,私の環境の Flash MX では,loadMovie 時の 「ストリーミングを表示」はうまく動作しないので, 検証は アップして検証した結果の回答です。

nanakkko
質問者

お礼

sassakun様 ご返信有難うございます。 >うまく動作しないと言うのは, >どんなに重い外部ファイルでも, >ほとんど瞬時に表示してしまうということです。 コ、コレです! わたしもこーなります。 そして‥実際にUPしてもうごきませんでした^^; 試しにですね・・FLASH8でやってみようと思い、体験版をDLして使ってみたところ‥一発で動きましたorz.. やはり8はいいんですねぇ‥ 思い切って買っちゃおうかと思ってます。 だって‥MXうごかにゃい;; sassakun様・・ いつも、とても親切に教えていただいて本当に感謝しております。こんなことは本を見ても書いてないし‥自分で考えてもわかるわけないし‥ 重々ね有難う御座います。

関連するQ&A