私は現在、非常に大規模なFlashプラットフォームゲーム(何百ものクラス)に取り組んでおり、ゲームを長時間放置するとゲームが遅くなるという問題に対処しています。私はゲームを書いていないので、私はその内部を漠然と熟知しています。いくつかの不思議な症状には、時間の経過とともにAS3のゲームパフォーマンスが低下する
- が含まれます。突然の突然のメモリリークが発生すると、所定のレベルでゲームが正常に実行されます。
- 指数関数的に漏れるポイントにゲームが到達するまでの時間は、画面にスプライトが多くなると短くなります。
- 画面に何も表示されていなくても、ゲームの速度が遅くなります。
- スプライトが頻繁に衝突すると、ゲームのスピードが速くなります。
- コリジョンコードを完全に無効にすると、劣化が緩和されますが、ゲームが最終的にフレームをドロップするのを防ぐことはできません。
ソースを見てみるとFlexプロファイラを使用して、私の総理容疑者は、多くの不明なオブジェクトはメモリを大量に取って、特にWeakMethodClosure
、
- があります。
- このプログラムでは、弱いイベントリスナー(フレームごとに数十回のディスパッチ)が非常に多く使用されています。
- 新しいスプライトが作成されるたびにBitmapDataがコピーされています。これらは50x50ピクセルのスプライトで、毎秒約8スプライトで生成されます。
ソースを見ることなく問題を教えてもらえないことはわかっているので、これを絞り込むためのヒントを探しています。誰も自分のプロジェクトでこの回避的なパフォーマンス低下を経験しましたか?あなたの場合、何が原因でしたか?
これは、大規模なゲームプロジェクトを開始し、その構造を最適にする方法が不思議である人にとって、これは大きなアドバイスだと思います。 – Kai