2016-04-23 6 views
0

私のLibgdx Androidゲームで少し問題があります。画面を変更すると、新しい画面が作成されるとすぐにアニメーションが開始されます。それはデスクトップ上で完全に細かく、滑らかに動作しますが、Android搭載デバイスでこれを実行すると、新しいスクリーンが作成され、アニメーションの数フレームがスキップされたように見えるときに遅れが表示されます。GC_FOR_ALLOCATIONが完了するのを待つことはできますか?

いくつかの調査の後、私はそれゆえGC_FOR_ALLOCが複数回呼び出された、新しい画面を作成する作成するために多くの新しい画像やその他のオブジェクトを呼び出すためであることを発見:

04-23 20:26:11.411: D/dalvikvm(18461): GC_FOR_ALLOC freed 385K, 48% free 8809K/16880K, paused 12ms, total 12ms 
04-23 20:26:11.531: D/dalvikvm(18461): GC_FOR_ALLOC freed 454K, 48% free 8867K/16880K, paused 12ms, total 12ms 
04-23 20:26:11.651: D/dalvikvm(18461): GC_FOR_ALLOC freed 475K, 48% free 8903K/16880K, paused 13ms, total 13ms 
04-23 20:26:11.746: D/dalvikvm(18461): GC_FOR_ALLOC freed 473K, 48% free 8942K/16880K, paused 12ms, total 13ms 
04-23 20:26:11.856: D/dalvikvm(18461): GC_FOR_ALLOC freed 481K, 47% free 8967K/16880K, paused 12ms, total 12ms 

だから私の質問は次のとおりです。 ができ私は何とか私のアプリがこれらの操作が完了するのを待っています。

実際には、 gcが割り当て操作を完了した後にアニメーションを開始できるように、ガベージコレクタの状態などを取得する必要があります。

ありがとうございました!

答えて

1

を参照してください。私はLibgdxを知らないが、私はそれはFPSが安定した場合にのみので、多分あなたは、アニメーションを開始することができますGdx.graphics.getFramesPerSecond()方法を持っている参照してください。 その方法が適切な平均を与えるには時間がかかり過ぎる場合はおそらくgetRawDeltaTime()から自分のFPSを測定できます。

+0

Omg、あなたはちょうどgetRawDeltaTime()に言及して私の問題を解決しました!以前私は_n_最後のフレームのスムージングされた値を返すgetDeltaTime()parametrを使ってrenderメソッドを呼び出していました!新しいシーンを作成するには時間がかかり、平均フレーム時間はしばらく長くなりました。そして、それは私が遅れと呼ばれるものでした!このメソッドはスムージングなしで2つのフレーム間の正確な違いを返すので、getRawDeltaTime()でrenderメソッドを呼び出すと解決されます。私の問題は間違っていると分かりました。新しいフレームが作成されたときに同じフレームでガベージコレクタが仕事を終えました:)ありがとうございました! –

+0

問題はありません、私はあなたがそれを解決してうれしいです:) –

0

System.gc()を使用してください。ドキュメント:メソッド呼び出しから制御が戻ると、Java仮想マシン はすべて破棄されたオブジェクトからスペースを再利用するために最善の努力をしている

Waiting for GC to finish before starting game with Java?

+0

ありがとうございますが、私はすでにそれを試みました。 GC_FOR_ALLOC操作は新しい画面の作成中に呼び出され、最初に数フレームがフリーズするため、このメソッドは私には役に立たない。新しいスクリーンの初期化の前に 'System.gc()'が呼び出されたとしても起こります。ガベージコレクターが完了するまで、私のゲームが握るよう指示する方法が必要です。 –

関連する問題