- ベストアンサー
少しづつ%が増えていくプリローダーの作り方
- Actionscript3.0で外部ファイルを読み込む際に、少しづつゲージや%が増えていくプリローダーを作りたいです。
- 現在作成中のプリローダーは一瞬で100%になってしまいますが、理想的なプリローダーでは読み込み進捗に合わせて表示が更新されるはずです。
- 作成したコードにはプリローダーの実装に関してのエラーがありますが、修正方法についても教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
考え方自体は私がかつてココで他の方に回答した このような感じ↓で行くとします。 「QNo.4071675 ローディングバーをゆっくりみせる方法」 http://okwave.jp/qa/q4071675.html 今回ご質問の場合に 上の考え方を当てはめると スクリプトは次のようになります↓。 ------------------------------- var loaded:int; var loadtotal:int; //↓本物のロード% var percent_A:int; //↓偽物のロード% var percent_B:int = 0; var loader:Loader = new Loader(); var rec:URLRequest = new URLRequest("komorebiTown.swf"); loader.addEventListener(Event.ENTER_FRAME,enterFrameHandler); loader.load(rec); addChild(loader); function enterFrameHandler(ev:Event):void { loaded = ev.target.contentLoaderInfo.bytesLoaded; loadtotal = ev.target.contentLoaderInfo.bytesTotal; //↓本物のロード%を算出 percent_A = Math.floor(loaded / loadtotal * 100); //↓偽物のロード%を算出(例:2ずつ加算) percent_B += 2; //↓本物と偽物のうち小さい方をテキストフィールドに表示 txt.text=String(Math.min(percent_A,percent_B)); //↓本物と偽物のうち小さい方が100に達すれば if (Math.min(percent_A,percent_B)>=100) { //↓関数onLoadedを実行 onLoaded(); } } //↓関数onLoadedの定義 function onLoaded():void { loader.removeEventListener(Event.ENTER_FRAME,enterFrameHandler); } ------------------------------- なお「ダウンロードのシミュレート」機能を すでに使っていらっしゃれば以下に書くことは無視してください。 こういったものをローカルで動作検証する場合は 「ダウンロードのシミュレート」機能を使うと大変簡単に検証できます。 「ダウンロードのシミュレート」は 「制御」→「ムービープレビュー」 で一旦ムービープレビュー画面を出し その画面から 「表示」→「ダウンロードの設定」で適当な回線速度を選び 「表示」→「ダウンロードのシミュレート」で色んな速度での表示のされかたを検証します。 上で書いたようなスクリプトに変更しなくて 元のままでも ネット上に実際にアップすれば(または「ダウンロードのシミュレート」の設定次第では), カウントアップする速さは,ある程度遅くなると思いますよ。 ただし元のままと言っても function proHandler 内で addEventListener(Event.ENTER_FRAME,loop); をし続ける部分は間違いだとは言い切れませんが変だとは思います。 (そんなにしょっちゅう何度も同じ addEventListener をしなくても良いでしょう。)
補足
とても丁寧に説明してくださってありがとうございます! ダウンロードのシミュレート機能も知らなかったので大変勉強になりました。 とりあえず教えてくださった通りにするとうまくいったのですが、気になるところがあったので質問させてください! swfファイルを読み込んでいるときに100%に達する前に50%あたりで読み込みが終わってしまうのですが、これをちゃんと100%までいかせるにはどうしたらいいのでしょうか? この部分でその処理をしているのかなと思ってたのですがうまくいきません。 ↓↓ if (Math.min(percent_A,percent_B)>=100) { //↓関数onLoadedを実行 onLoaded(); } もう一つは読み込みの速度をもう少しスムーズに上げることって出来るのでしょうか? すみません、自分で「少しづつ%を上げるには?」という質問を出しておきながらこんなことを聞いてしまって。 もう少しストレスを感じない程度にスーッと数字が上がっていかないかなと思いまして。 もしお分かりになればよろしくお願いします!