0

これを Adob​​e フォーラムに投稿しましたが、良い回答は期待できません。フラッシュでゲームをしたことがあり、同じ問題に遭遇した人からの助けを探しています。

私の問題を再現する手順:

  1. フラッシュで単純なドット DisplayObject を作成する

    dot.graphics.beginFill( color);
    dot.graphics.drawCircle( 0, 0, 2 );
    dot.graphics.endFill();
    
  2. ドットをフレームに何度もビットマップに描画する

    bitmapData.draw( dot, null, null, "normal", null, _smoothing );
    
  3. Win32 上のブラウザー、フラッシュ プラグイン バージョンの組み合わせで FrameRate をテストする

予想:

ほとんどの場合、近いフレームレート

観測:

IE7 で Flash10b.ocx(10.0.22) を使用するとフレームレートが 25% 低下し、Flash10c.ocx(10.0.32) を使用するとフレームレートが 50% 低下します。FireFox、Safari、および Mac OSX のプラグインでは、同じ速度低下は見られません。

助けてください:

Internet Explorer で見られるパフォーマンスの問題について、ヘルプ/確認を取得したいと考えています。Adobe と Flash のコミュニティはインターネット上で優れていますが、10.0.32 と 10.0.22 でのムービー再生に関するレポートがいくつかあるだけで、これに関する情報がないことに驚いています。

私の推測では、IE ではフラッシュ プラグインがドロー コールを Win32 に渡しており、これは遅いと思われます。

私の解決策は次のとおりです。

draw を使用して毎回ビットマップに描画する代わりに、描画呼び出しをビットマップにキャッシュし、CopyPixels. これを行うと、パフォーマンスはブラウザ間で同じで、10% 以内です。

bitmapData.copyPixels(dot.bitmapData,dot.bitmapData.rect,new Point(dot.x,dot.y),null,null,true);

私が使用しているループ:

function enterFrame(e:Event) {
    bitmap.lock();

    for (var i:int=0;i<particles.length;i++) {
        draw(particle[i]);
    }

    bitmap.unlock();
}

私がもっと知りたい他の「既知の」問題についてのメモ:

  • IE では、私のアプリケーションのメモリ使用量ははるかに小さいと報告されています (通常、Flashplayer では 33MB、IE では 16MB)。
  • IE では、メモリ ページ フォールトは 10k/秒を超えますが、フラッシュ プレーヤーでは発生しません。
  • IE では、stage.invalidate がパフォーマンス ヒッチングの問題を引き起こすようです。
  • IE では、ビットマップにぼかしフィルターを配置すると、Flash Player よりも大きなパフォーマンス ヒットが発生します。
4

2 に答える 2

0

Flash プラグインのパフォーマンスは、すべてのプラットフォーム/ブラウザー/マイナー バージョン/デバッガーなどで (乱暴に) 異なります。ターゲット ユーザーの最小公倍数をコーディングする以外に、これらの違いを相殺するためにできることはほとんどありません。

bitmapData.drawはいえ、すべての呼び出しでベクター データの再ラスタライズを強制するため、低速です。内部的には、Flash もこのメソッドを使用しますが、画面のダーティ領域を追跡するため、呼び出し回数が少なくなります (これを視覚的に確認するには、デバッガーで「再描画領域の表示」をオンにします)。

あなたのbitmapData.copyPixelsソリューションは、手動のラスター実装にとって正しいものです。これは、Flash で高性能で複雑なアニメーションを実現する唯一のメカニズムです。

于 2009-11-12T02:41:09.083 に答える
0

確認してくださってありがとうございます。ロックの目的は、フラッシュが再描画を最小限に抑えるのを助けることだと思いました。Flash アプリが 60 fps 近くで実行されているにもかかわらず、カクつきが見られます。

私がすべてを正しくコーディングしたかどうか疑問に思う人よりも。まったく新しい tweenlite パフォーマンスのサンプル コードを、約 150 ピクセル/秒の直線的な動きになるように変更しました。これにより、人々が見る吃音が強調されます。例はhttp://forums.greensock.com/viewtopic.php?f=1&t=1857にあります。

于 2009-11-13T00:12:23.213 に答える