0

通常、フレームがレンダリングされるたびに ENTER_FRAME イベントをリッスンし、コードを実行します。しかし、私のアプリケーションでは、これは遅すぎます。2 つの ENTER_FRAME イベント間の時間は 40 ミリ秒です。フレームレートを変更しても問題ありません。

イベントをリッスンせずにフラッシュにフレームの再描画/レンダリングを強制することは可能ですか? stage.invalidate() メソッドを試してフレームレートを変更しましたが、何も改善されません (stage.invalidate() は実際には何もしません)

ENTER_FRAME イベントと EXIT_FRAME イベントの間の平均時間を確認するために、小さなテストを行いました。

private var beginTime:Number;
private var endTime:Number;

public function init():void {
    addEventListener(Event.ENTER_FRAME, enterFrame);
    addEventListener(Event.EXIT_FRAME, exitFrame);
}

private function enterFrame(e:Event):void {
    beginTime = new Date().getTime();

    if(endTime) {
        trace(beginTime - endTime);
    }
}

private function exitFrame(e:Event):void {
    endTime = new Date().getTime();
}

私が正しければ、そのフレームのレンダリング前に ENTER_FRAME イベントが発生し、レンダリング後に EXIT_FRAME イベントが発生します。したがって、EXIT_FRAME イベントの後、レンダリングが完了し、アプリは ENTER_FRAME イベントを送出します。これら 2 つのイベント間の平均時間は 52 ミリ秒です。そして、その時間を短縮したい

ちなみに、このテストではフレームレートを 180 に設定しました

4

1 に答える 1

1

stage.Invalidate は、ステージを強制的に再描画します。最初に時間の問題を解決する必要はありません。

于 2013-02-06T16:05:17.643 に答える