Самый эффективный способ сделать игровой цикл Java - PullRequest
0 голосов
/ 05 мая 2018

Я ищу лучший способ сделать петлю задержкой в ​​игре. Это Thread.sleep(...); или просто проверка времени, прошедшего с последнего тика? Я слышал, что Thread.sleep(...) было неточным.

1 Ответ

0 голосов
/ 05 мая 2018

Как правило, если вы задерживаетесь между фреймами игры, 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, оно вообще не ждет.

...