2016-04-07 21 views
1

私は多くのビューと多くのコントローラを持つかなり複雑なゲームを持っていて、それは本当にうまく動作しますが、定期的に遅れます。私は自分のコードを修正しようとしていますので、効率的ですが、誰がAS3でイベントを処理するかについていくつか質問があります。AS3は私がremoveEventListenerする必要があります

のAppController負荷5異なるOverlayControllers:今ここに

は非常に基本的な例です。それらのOverlayControllerのそれぞれは、AppControllerが聴いているときにEvent.COMPLETEを送出します。私は、ゲーム内のどこにいても、それらのOverlayControlllersを聴いている定数EventListenerを持っています。

オーバーレイが開いているときに、そのリスナーのみが必要ですか?そして彼らが閉じるときにそれらを取り除く?

イベントリスナー期間をバイパスし、AppControllerをOverlayControllersに渡して、単にEventListenerを要求する代わりにpublic関数を呼び出すことができますか?

これらはステージから削除するオブジェクトではありません。彼らはただ隠されているだけです。私がオブジェクトを削除した場合、それらを破棄する前に常にイベントリスナーを削除します。

+1

イベントを聞いても遅延が発生することはありませんが、多くの場合、ディスパッチイベントは常に送出されます。ラグの問題が発生した場合、イベントはほとんど関与しません。 – BotMaster

答えて

1

最初にAdobe Scout(http://www.adobe.com/devnet/scout/articles/adobe-scout-getting-started.html)をダウンロードし、「遅れ」の原因となっているものを参照してください。おそらくガベージコレクション...問題を修正してください。可能な限り多くのリスナーを削除することは常に良いことですが、それらが原因で問題が発生していることを確認してください。ガベージコレクションを回避するために、メモリの使用状況をプロファイルし、オブジェクトの作成/破壊を最小限に抑えてください(メインゲームループ中)。

+0

負荷がオブジェクトの作成/破棄の多くによって引き起こされ、同じオブジェクトがたくさんある場合は、オブジェクトプーリングを実装する必要があります – Philarmon

関連する問題