Как правило, если вы задерживаетесь между фреймами игры, Thread.sleep
- это хорошо.
Вы можете использовать его вместе со звонками на System.currentTimeMillis()
, чтобы решить, сколько времени нужно задерживать между кадрами.
Пример:
while(!quit) {
long beginTime = System.currentTimeMillis();
update();
render();
long timeTaken = System.currentTimeMillis() - beginTime;
long sleepTime = DELAY_PERIOD - timeTaken;
if (sleepTime >= 0) {
try{Thread.sleep(sleepTime);} catch(InterruptedException e){}
}
}
, где DELAY_PERIOD
- это общее количество миллисекунд, которое вы хотите получить за кадр. Кроме того, вам не нужно обрабатывать InterruptedException
, если вы специально не запрограммируете свое приложение на использование прерываний.
Этот пример позволяет изменять длину задержки в зависимости от времени, потраченного на функции update()
и render()
. Если обновление или рендеринг занимает больше времени, чем DELAY_PERIOD
, оно вообще не ждет.