0

私は大量のオブジェクト(2000+)でのフロッキング/ステアリングビヘイビアのためにいくつかのライブラリクラスを開発しています。私は< 500インスタンスでは、パフォーマンスが妥当であることが分かっています。数字が増えるにつれて、フレームレートが低下します。ActionScript 3の最適化 - オブジェクトの大量のパフォーマンスを向上させる

FlintやBox2Dなどのライブラリでは、ばかげたパーティクル/オブジェクトのライブラリで顕著なパフォーマンスが見られました。そのため、コードを最適化/リファクタリングすることができます。

私は、ビット単位の操作や最適化されたループなどの基本的な最適化について認識しています。私が検討すべきより根本的なアプローチはありますか?たとえば、現在、各インスタンスはベクターベースのMovieClipです。 BitmapDataを使用する方が効率的でしょうか?

+0

簡単に言えば、BitmapDataとベクターベースのムービークリップを使用することについて正しいと思いますが、MovieClipでcacheAsBitmapをtrueに設定するだけで効率を上げることさえできます。一般的に言えば、私はFlex/Flashで最大のパフォーマンスを得ているようですが、オブジェクトの作成と破壊を厳密に制御しているようですが、これは明らかですが、すでに作成されたオブジェクトを再利用するためにできることはすべてあります。また、直観に反するように、Numberを使用して最適化することで、プレーヤーがuintまたはintの代わりにNumberを使用するように見えることがあります。 – shaunhusain

+0

具体的には、GoogleマップのフラッシュAPIで使用するコードを最適化する際に、これらのテクニックをいくつか使用しました。詳細はこちらhttp://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google -maps /不要なオーバーヘッドをたくさん追加する可能性があるので、可能な限りBindableの使用を避けることをおすすめします(リスナ/ディスパッチャコードをAS3に追加し、自動的にイベントをディスパッチするのはコストがかかる)。 – shaunhusain

答えて

1

ベクターを忘れる。

ビットマップデータとしてキャッシュし、ビットマップに描画するか、グラフィックスにビットマップ塗りの矩形を描画します。

ベクターを使用しないでください。その周りに道を見つける。賢くなる。ビットマップルックアップテーブル、キャッシング、さらにルックアップテーブル。 無駄なCPUサイクルでPROCESSORを使うのではなく、さまざまな方向、ビュー、フレームなどのためにキャッシュすることにRAMを費やします。

+0

私はいくつかのBitmapData実験を行っています。 Flash Player 10.1では、このドメインではほとんど不要なものがあるようですが、このドメインでは可能な限りの最適化があります。ここには素晴らしいリソース/チュートリアルがあります(ただし、パーティクルについては、行動を起こさない)http://unitzeroone.com/blog/2011/01/16/the-particle-sessions-part-one-is-this-it/ –

関連する問題