Работаю над своей первой игрой :)
Это игра для Android, использующая libgdx и использующая модифицированный пример одного из цикла DeWiTTERS
Игровой цикл, кажется, отлично работает на рабочем столе (59–60 кадров в секунду), однако, когда я запускаю свой телефон, он имеет тенденцию находиться где-то в районе 75–90 кадров в секунду.
nextGameTick всегда должен ссылаться на 16 мс в будущем, чтобы игровой цикл работал со скоростью 60 кадров в секунду или меньше, почему это не так?
Вот основная часть игрового цикла для справки:
public void render() {
nextGameTick = System.nanoTime() + skipTicks;
loopTimeFull = System.nanoTime();
Application app = Gdx.app;
screen.update(app); // Update the screen
screen.render(app); // Render the screen
// when the screen is done we change to the
// next screen
if (screen.isDone()) {
// dispose the current screen
screen.dispose();
<snip>
// Removed unneded part of code for this example
</snip>
}
}
// Make the thread sleep
General.renderTime = System.nanoTime() - loopTimeFull;
while (System.nanoTime() <= nextGameTick - General.renderTime) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
General.loopTime = System.nanoTime() - loopTimeFull;
if (General.loopTime > 0)
General.curFps = 1000000000 / General.loopTime;
else
Gdx.app.log("Air Offense", "General.loopTime == 0");
General.curFps = 1000000000 / General.loopTime;
? - person Mister Smith   schedule 20.10.2011Thread.sleep
имеет параметр в мс. Также существует перегруженный метод, принимающий ns. Однако ни один из них не гарантирует, что он будет спать ровно определенное количество времени. Чтобы иметь большую точность, используйте Timer, чтобы засыпать точно требуемое количество ns за одно ожидание. - person Mister Smith   schedule 20.10.2011