Traceviewは、updatePhysics()が10msごとに呼び出されており、実行に約8msかかることを示しています。ただし、updatePhysics内で呼び出すメソッドは、updatePhysics()が5回または6回実行されるたびに1回のみ実行されます。これはTraceviewのバグか、何が起こっているのでしょうか?私のゲームはかなりの量を吃音しているので、私はそれが何を引き起こしているのか把握しようとしています。Traceviewは、200ms以上呼び出されないメソッドを示しています
Traceviewは、私のメソッドの多くが、一度も呼び出されずに数百ミリ秒かかることを一般的に示していますが、呼び出すべき理由がないようです。アイデア?
実行方法:
while (mRun)
{
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
Canvas c = null;
try
{
c = mSurfaceHolder.lockCanvas(null);//null
{
time2 = System.nanoTime()/100000; // Get current time
float delta = (time2 - time1)/1000f;
if (mMode == STATE_RUNNING) updatePhysics(delta);
else updateMenus();
doDraw(c);
time1 = time2;
}
} finally
{
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null)
{
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
更新物理学:
private void updatePhysics(float delta)
{
updateScore(delta);
updateDifficulty();
}
EDIT:あなたがここに見ることができるように、updateDifficultyがしばしばupdatePhysicsが定期的に呼び出されているにもかかわらず、数百ミリ秒のために呼び出されていません。.. 。 意味がない。 Screenshot of traceview
あなたのスレッドで呼び出す関数にパラメータが含まれている間は、updatephysics関数はパラメータを受け取りません。また、あなたはその方法がその速さと呼ばれることに頼るべきではありません。あなたはOSのスケジューリングを制御できません。 – Falmarri
ああ、私はこのウィンドウにテキストを間違ってコピーしていただけです。さて、メソッドが呼び出される頻度を制御できない人がいれば、数百msの遅れは完全に受け入れられますが、ゲームはどのようにスムーズに動作しますか? – Smills
devガイドの応答性、性能などに関するガイドを読んだことがありますか? http://developer.android.com/guide/practices/design/responsiveness.html大きな課題の1つは、メモリ割り当てを避けることです(gcを避けることができます)。また、UIの更新をブロックする可能性があるため、(物理計算のような)時間がかかるUIスレッドで何もしないでください。 –