4

より「従来の」 C++バックグラウンドから来ているため、flash.display APIのようなものではなく、低レベルAPIの処理に慣れています。

私の問題はかなり初歩的なものですが、私の検索では解決策が見つかりませんでした。

ディスプレイAPIで画面のティアリング/ちらつきを回避するにはどうすればよいですか?60 fpsのような高いフレームレートでも、フレーム間でかなり厄介なちらつき/ティアリングが発生しています。

以下の単純な例を見てください。ここでは、スプライトの子は単にShapeのインスタンスであり、変更されることはありません。

private function onEnterFrame(event:Event):void
{   
    var t:Number = (getTimer() - time) / 1000;
    time = getTimer();

    step(t);
}

private function step(t:Number):void {
    var speed:Number = 100;

    for (var i:uint = 0; i < numChildren; i++){             
        getChildAt(i).x += speed * t;
        getChildAt(i).y += speed * t;
    }
}

ただし、他の誰もが一見スムーズで高速なアニメーションを実行できるため、基本的に同期の問題のように見えるため、実際にどのように実行するかについては少し戸惑います。

4

2 に答える 2

1

まず、CPU を必要以上に働かせています。滑らかなアニメーションには 25/30 fps が必要なので、このレートでのみ step を呼び出すことができます。スプライトの位置を更新する前に、x、y の外観が実際に変更され、変更された場合にのみ更新されます。

ループをできる限りタイトにします: numChildren (メソッド呼び出し) をループから外します。速度変数を Number ではなく int にする (より高速)

スプライトを見てください。透明度はありますか? フラッシュは各フレームにすべてのレイヤーを描画する必要があるため、透過性はパフォーマンス キラーです。さらに最適化できます。たとえば、品質を落とさずにできるだけ小さくします (スプライト サイズに縮小された大きな画像を使用している場合)。

于 2011-05-07T08:54:52.827 に答える
0

アニメーションの滑らかさに大きな影響を与える wmode パラメータを見てきました。同じ swf が、スタンドアロン プレーヤーと異なる wmode の html ページでは異なる動作をします。いくつかのテストの後、私は wmode="direct" を好みます - これは最もスムーズな動きを提供し、"gpu" よりも優れています。

Statsなどの ActionScript 用の監視ツールを使用して、実際の fps を確認することをお勧めします。高いままでまだぎくしゃくした動きが見られる場合は、wmode の問題です。また、60 fps は 30 よりも優れています。パフォーマンスに縛られていない場合は、60 fps を使用しないでください。

于 2011-05-07T17:20:01.743 に答える