重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Actionscript3.0でプリローダーを作成しているところなのですが、なんとなくネットで検索しながら出来てきたのですが、外部ファイルを読み込むときに他のサイトでよく見る少しづつゲージや%が増えていくようになりません。
自分のは一瞬で100%になってしまいます。
これを少しづつ増やしていくやり方ってないのでしょうか?
もしあれば是非ご教授お願いします。
ネットでもいくつか載っていたのを試してみたのですが、すべてエラーになってしまいうまくいきません。

一応ここまでは作りました。
↓↓
var percent:int;
var loaded:int;
var loadtotal:int;
var loader = new Loader();
var rec = new URLRequest("komorebiTown.swf");
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,proHandler);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
loader.load(rec);
addChild(loader);


function proHandler(ev:ProgressEvent){
loaded = ev.bytesLoaded;
loadtotal = ev.bytesTotal;
addEventListener(Event.ENTER_FRAME,loop);

}

function loop(ev){
percent = Math.floor(loaded/loadtotal * 100);
txt.text = String(percent);
}


function onLoaded(event) {
loader.removeEventListener(ProgressEvent.PROGRESS, proHandler);
loader.removeEventListener(Event.COMPLETE, onLoaded);
};


他になにか間違っているようなところあれば教えてください。
よろしくお願いします!

A 回答 (1件)

考え方自体は私がかつてココで他の方に回答した


このような感じ↓で行くとします。

「QNo.4071675 ローディングバーをゆっくりみせる方法」
http://oshiete.goo.ne.jp/qa/4071675.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();
}


もう一つは読み込みの速度をもう少しスムーズに上げることって出来るのでしょうか?
すみません、自分で「少しづつ%を上げるには?」という質問を出しておきながらこんなことを聞いてしまって。
もう少しストレスを感じない程度にスーッと数字が上がっていかないかなと思いまして。

もしお分かりになればよろしくお願いします!

補足日時:2011/01/25 13:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!