問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:8 / 状態:解決済み / No:50 / ATOM
1 名前:豆黄金 日付:2010/08/23(月)14:11:53 ID:t.shVpTd5ZDO
いつもサイトのTipsにお世話になっております。私、現在Flash CS5 でAS3.0を勉強中の者です 
今、外部のswfをLoaderで読み込んで表示する単純なFlashを制作中です。
それで、読み込み状況をProgressEventを使ってテキストフィールドに表示したいのですが 
どうしても開始の0パーセントと、最後の100%しか表示されません。 
load()メソッド開始と同時に画面も止まってテキストフィールドの値も変化せず読み込み完了後に100%と表示されるだけです 

var loader_obj : Loader = new Loader(); 
var info : LoaderInfo = loader_obj.contentLoaderInfo; 

info.addEventListener (ProgressEvent.PROGRESS,LoaderInfoProgressFunc); 
function LoaderInfoProgressFunc (event : ProgressEvent):void { 
  trace (Math.floor(event.bytesLoaded/event.bytesTotal*100) + "%"); 
txt_status.text = Math.floor(event.bytesLoaded/event.bytesTotal*100) + "%"; 


info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc); 
function LoaderInfoCompleteFunc (event : Event):void { 
  trace ("完了"); 


var url : URLRequest = new URLRequest("test.swf"); 
loader_obj.load(url); 

出力ログを見ると、一応途中経過(1%~99%)も出力されていはいますが、 
この経過部分は最初の0%以後、ローディングが完了した後に1%~100%までが一気に表示されるだけで動的に数字が増えて要っている様子はないです。 
ちなみにswfは50MB程度で、400枚の連番jpgがメインタイムラインに並んでいるものになっています。 
何とかして読み込みの経過を表示させたいです。何とぞよろしくお願いします。
2 日付:2010/08/23(月)17:38:19 ID:rmf8Gh7/SGVS
フレーム毎に描画してみた。

var loader_obj : Loader = new Loader(); 
var info : LoaderInfo = loader_obj.contentLoaderInfo; 
var percent:Number;
var url : URLRequest = new URLRequest("test.swf"); 
loader_obj.load(url); 

info.addEventListener (ProgressEvent.PROGRESS,LoaderInfoProgressFunc); 
info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc); 
addEventListener(Event.ENTER_FRAME, drawtxt);//フレーム毎描画

function LoaderInfoProgressFunc (event : ProgressEvent):void { 
  trace (Math.floor(event.bytesLoaded/event.bytesTotal*100) + "%");
percent = Math.floor(event.bytesLoaded/event.bytesTotal*100);


function drawtxt(event:Event):void {
txt_status.text = percent + "%";
}

function LoaderInfoCompleteFunc (event : Event):void { 
  trace ("完了");

3 名前:豆黄金 日付:2010/08/23(月)20:19:16 ID:t.shVpTd5ZDO
早速の回答ありがとうございます!

しかし、試してみたのですが、やはり解決しませんでした。
具体的には 0% の代わりに NaN(値無し状態のpercentと思われ) が表示される以外は
100%になるまでテキストが更新されなず・・・といった感じです。

うーん・・・。



4 名前:CS5で 日付:2010/08/23(月)20:49:17 ID:rmf8Gh7/SGVS
今チェックしましたがちゃんと動きますよ~
5 日付:2010/08/23(月)20:59:09 ID:rmf8Gh7/SGVS
簡潔にしてみた。

var ratio:Number;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loader.load(new URLRequest("test.swf"));
addEventListener(Event.ENTER_FRAME, drawtxt);//フレーム毎描画

function progressHandler(event:ProgressEvent):void {
ratio = Math.floor(event.bytesLoaded/event.bytesTotal*100);
}

function drawtxt(event:Event):void {
txt_status.text =String(ratio);
}
6 名前:豆黄金 日付:2010/08/23(月)23:41:32 ID:t.shVpTd5ZDO
皆様、検証ありがとうございます。

で・・・すみません、出来ました。また、最初に私が書き込んだソースでも出来ました。
原因は、swf+HTMLで出力しているか、swf単体+デバッグ用Flashプレイヤーやexe実行形式で出力しているかの差でした。

後者だと読み込み前述の通り読み込みが終わるまで表示が更新されない用です。そういうものなんですかねぇ。
7 名前:状態変更 日付:2010/08/24(火)10:25:39 ID:t.shVpTd5ZDO
この質問の状態を『解決』に変更しました。
8 日付:2010/08/24(火)12:10:41 ID:uBWlVKhKm5xp
最初のやり方だと数字がぶっ飛びますね
このスレッドについて
質問の状態 :
解決済み
投稿開始日 :
2010/08/23(月)14:11:53
投稿終了日 :
2010/08/24(火)12:10:41
投稿者 :
豆黄金
レス総数 :
8
スレッド番号 :
50
MondoCollectionSystem ver.0x00020000 by Hakuhin