Я делаю базовую 2D-игру, но у меня проблемы с задержкой. Персонаж игры отлично движется, но иногда замедляется, в основном, рядом с врагом. Враг не вызывает отставания, поскольку у меня было 50 из них на экране сразу, и все работает нормально. Я делал выбор времени почти идентично тому, как это делается в Программе игр Killer в Java-книге, но, похоже, это не слишком хорошо работает. Кажется, что FPS сильно изменилось, чего не должно, потому что для завершения цикла update-render-paint-sleep всегда требуется 15 мс, может ли кто-нибудь объяснить это?Почему моя игра отстает?
Кроме того, я думаю, что он больше мешает, когда мой компьютер делает что-то в фоновом режиме (антивирусное сканирование и т. Д.), Хотя я могу запустить игру примерно в 550FPS, пока он запускает другие программы, поэтому я не думаю, что это мой компьютер.
Вот как я делаю синхронизацию:
int waitTime = 1000/65; //65 being the desired FPS
while(running){
if(!loading){
gameUpdate();
gameRender();
gamePaint();
afterTime = System.nanoTime();
timeDiff = afterTime - beforeTime;
sleepTime = waitTime - (timeDiff/1000000L);
if(sleepTime > 0){
try{
mainThread.sleep(sleepTime);
} catch(InterruptedException ie){}
}
else{
sleepSkipped++;
if(sleepSkipped == maxSleepSkipped){
Thread.yield();
sleepSkipped = 0;
}
}
fpsTime += (System.nanoTime() - beforeTime)/1000000;
fps++;
if(fpsTime > 1000){
System.out.println("FPS: " + fps);
fps = 0;
fpsTime = 0;
}
beforeTime = System.nanoTime();
}
}
Что вы делаете, когда рядом с врагом? У столкновения/боя может быть ошибка, я не вижу ничего плохого в вашем цикле. – arynaq
Каждый враг постоянно проверяет игрока. Я бы попросил врага проверить игрока только тогда, когда он рядом, но я не могу. Хотя я хорошо посмотрю на обнаружение столкновений. – Hsenfow