Flash CS5 と FlashDevelop を使用して、ActionScript 3 でゲームを作成しています。できるだけ多くのデータ駆動型のゲームを作ろうとしています。そのため、ほとんどのゲーム情報は、ゲームで必要なときに読み込まれる XML ファイルに保存されます。
この読み込みはうまくいきますが、たまたまいくつかのファイルがかなり大きくなり、読み込みに数秒かかる場合があります (私の PC では現時点で 3 ~ 3 秒かかりますが、さらに長くなると予想されます)。そこで、進行状況を示すロード画面 (少なくともパーセンテージのバー) を追加したいと考えました。
後の部分は私を混乱させるものです。XML ファイルの読み込みを要求するコードは次のとおりです。
public function load( a_FileName:String, a_Callback:Function, a_LoadingScreen:MovieClip ):void
{
m_Callback = a_Callback;
m_LoadingScreen = a_LoadingScreen;
var t_URLLoader:URLLoader = new URLLoader();
t_URLLoader.addEventListener( Event.COMPLETE, fileLoadComplete );
t_URLLoader.addEventListener( ProgressEvent.PROGRESS, fileLoadProgress );
t_URLLoader.load( new URLRequest( a_FileName ) );
}
各 ProgressEvent.PROGRESS で次のコードを呼び出す必要があります。
public function fileLoadProgress( e:ProgressEvent ):void
{
m_LoadingScreen.txtPercentage.text = Math.floor( ( e.bytesLoaded / e.bytesTotal ) * 100 ) + "%";
}
問題は、私のプログラムが最初にファイルをロードしているように見え (ビジー状態の間は何もしていない)、ロード画面が表示されることです。
fileLoadProgress 関数にトレースを入れると、出力ウィンドウにいくつかの更新が表示されますが、画面は更新されません。
MouseEvents を使用する場合、updateAfterEvent() 関数を使用して強制的に描画呼び出しを実行できることはわかっていますが、ProgressEvents を使用する場合、このメソッドは使用できないようです。
xml ファイルの読み込み中に画面を強制的に更新する方法はありますか?
- -編集 - -
この問題をさらにテストするために、小さなサンドボックスを作成しました。フレーム 1 に動的テキスト フィールドと次のコードを含む単一の FLA ファイル:
var t_URLLoader:URLLoader = new URLLoader();
t_URLLoader.addEventListener( Event.COMPLETE, fileLoadComplete );
t_URLLoader.addEventListener( ProgressEvent.PROGRESS, fileLoadProgress );
t_URLLoader.load( new URLRequest( "data/TerritoryData.xml" ) );
stop();
function fileLoadProgress( e:ProgressEvent ):void
{
trace( Math.floor( ( e.bytesLoaded / e.bytesTotal ) * 100 ) + "%" );
txtPercentage.text = Math.floor( ( e.bytesLoaded / e.bytesTotal ) * 100 ) + "%";
}
function fileLoadComplete( a_Event:Event ):void
{
trace( "done!" );
txtPercentage.text = "done!";
}
これは私ができる限りのクマの骨ですが、それでも同じ問題を示しています。私の出力ウィンドウでは、トレースは次のように表示されます。
28% 56% 84% 100% 完了!
しかし、画面では空白から「完了」になります。fileLoadProgress 関数にブレークポイントを設定すると、画面も更新されません。fileLoadProgress 関数で URLLoader を Close() すると、「28%」というテキストになります。
何か案は?これは私を夢中にさせています...