0

私はそのような非常に単純なコードを持っています。

loadingMc.visible = true;
trace("ok");
// send photo to server
loadingMc.visible = false;

写真の送信には 3 ~ 5 秒かかりますが、ムービー クリップはプロセスの最後の 1 秒間だけ表示されます。プロセスの開始時に出力に「ok」メッセージが表示されます。したがって、問題はムービークリップの再描画ではないと思います。プロセスが開始する前に再描画を強制するオプションはありますか?

更新: サーバー部分に送信しています。

upload.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
    loadingText.visible = true;
    trace("ok");
    var bmd:BitmapData = new BitmapData(1024,768,true,0);
    bmd.draw(imageArea);
    savePicToServer(bmd);
});

function savePicToServer(bmd:BitmapData):void
{   
    var jpgEncoder:JPGEncoder = new JPGEncoder(85);
    var jpgStream:ByteArray = jpgEncoder.encode(bmd);

    var loader:URLLoader = new URLLoader();
    configureListeners(loader);
    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
    var request:URLRequest = new URLRequest("http://localhost/test/upload.php?key=prvkey");
    request.requestHeaders.push(header);
    request.method = URLRequestMethod.POST;
    request.data = jpgStream;
    loader.load(request);
}

COMPLETE イベントで。

loadingText.visible = false;
4

1 に答える 1

1

編集

コードを読んだだけでは、なぜこれが機能しないのかわかりませんが、FPは時々奇妙なことをします。

同様のケースで、私setTimeout()はプレーヤーに後続のアクションを遅らせ、画面を更新できるようにするために使用しました。

upload.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
    loadingText.visible = true;
    trace("ok");
    setTimeout( doSave, 10 );
});

private function doSave() : void {
    var bmd:BitmapData = new BitmapData(1024,768,true,0);
    bmd.draw(imageArea);
    savePicToServer(bmd);
}

それでも機能しない場合は、タイムアウトを長くするとうまくいく可能性がありますが、通常は10ミリ秒で画面を更新できます。

編集

もう1つの方法は、リスナーを追加および削除しENTER_FRAMEて、フレームが実際に更新されたことを確認することです。

upload.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
    loadingText.visible = true;
    trace("ok");
    addEventListener( Event.ENTER_FRAME, onNextFrame );
});

private function onNextFrame( ev:Event ) : void {
    removeEventListener( Event.ENTER_FRAME, onNextFrame );
    doSave();
}

private function doSave() : void {
    var bmd:BitmapData = new BitmapData(1024,768,true,0);
    bmd.draw(imageArea);
    savePicToServer(bmd);
}
于 2012-12-29T01:21:23.717 に答える