0

私は Android 用の大砲ゲームに取り組んでいます。これには手続き型のレベル生成が必要です。プレイヤーが空を飛ぶと、レベルの最後に新しいセクションが追加され、無期限に進行し続けます。それらのセクションが追加されると、プレーヤーがすでに通過したセクションは削除されます。問題は、通常、セクションを作成すると GC_FOR_ALLOC が発生し、ゲームが約 30 ミリ秒一時停止し、顕著なラグが発生することです。

他のオブジェクトが追加されている間にオブジェクトが削除されるため、空きメモリはかなり一貫したままであるため、メモリ リークはないようです。私が使用しているエンジンは、iOS の cocos2D-android-1 ポートです。

「ゲームの実行中には初期化しない」という方針に沿って多くの解決策を見てきましたが、ゲームの開始時に無期限のレベルを作成することはできないため、レベル生成の性質上、これが必要です。

ご協力いただきありがとうございます!

4

1 に答える 1

3

あなたはあまり具体的ではありません。ラグが大きすぎる場合は、それを減らすように努める必要があります。

1 つの方法は、より頻繁に収集することです。その結果、一時停止は短くなりますが、より頻繁に発生します。

たとえば、より小さなセクションまたは部分的なセクションのみを作成し、後でガベージ コレクターを微調整して実行しようとする場合があります。これに使用System.gc()します。ただし、System.gc()実際に実行が開始されるとは限らないことに注意してください。

さらに良い解決策は、オブジェクトを再利用することです。レベルが開始される前に作成されたオブジェクト。この方法では、ガベージが蓄積されないため、エンドレス レベルでもガベージ コレクションは発生しません。ただし、プールされていないオブジェクトは作成しないでください。

于 2012-10-06T21:44:17.623 に答える