1

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%」というテキストになります。

何か案は?これは私を夢中にさせています...

4

2 に答える 2

0

最初のフレームですべてをセットアップして、2 番目のフレームにロードしようとしましたか? したがって、実際には次のようになります。

t_URLLoader.load( new URLRequest( "data/TerritoryData.xml" ) );
stop();

二枠目へ。間に txtPercentage が更新されないと思います。

于 2012-12-09T11:32:22.433 に答える
0

Dave Hart が元の質問のコメントで述べたように。答えは、xml ファイルが外部 Web サイトからロードされない限り、Flash は画面を更新しないということです。

私の Web サイトの XML では、ゲームのテキスト フィールドに 1 つまたは 2 つの更新が表示され、その間に画面の更新が停止していました (フレームレートを追跡するためにバックグラウンドで単純なアニメーションを使用しました)。これは、デバッグ ウィンドウで受け取るトレース出力の量にはまだほど遠いですが、少なくとも、1 秒ごとに約 1 回の更新で実際に画面に出力できることを示しています。

私も初めて試してみたところ、2回目よりはうまくいったように見えましたが、これは一時的にファイルをローカルに保存しているせいでしょうか?

残念ながら、私のファイルはローカルにロードされるため、私にはまったく役に立ちません。そのため、アニメーションがまったくないローディング画面で生活する必要があると思います。

于 2012-12-21T22:45:34.593 に答える