Итак, я работаю над созданием 2D-игры на Java, и у меня действительно не слишком много опыта работы с Java. В настоящее время я использую очень простой цикл с помощью поворотно таймера выполняется каждые 10 мс или так, что выглядит примерно так:Обновление и рендеринг для 2D-игры в Java
public void actionPerformed(ActionEvent e) {
update();
repaint();
}
Однако, мне нужно что-то более практичное, по понятным причинам. Эти причины включают в себя тот факт, что большее отставание означает меньше FPS и более медленное перемещение/другое обновление. Я нашел следующий код в учебнике для 3D-игры Java here. Он начнет работать, когда начнется программа, и я достаточно понимаю, чтобы знать, что это сработает. Тем не менее, я до конца не понимаю: (клеща() является программой обновления, визуализации() делает экран)
long currenttime;
long previoustime = System.nanoTime();
long passedtime;
int frames = 0;
double unprocessedseconds = 0;
double secondspertick = 1/60.0;
int tickcount = 0;
boolean ticked = false;
while (gameIsRunning) {
currenttime = System.nanoTime();
passedtime = currenttime - previoustime;
previoustime = currenttime;
unprocessedseconds += passedtime/1000000000.0;
while (unprocessedseconds > secondspertick) {
tick();
unprocessedseconds -= secondspertick;
ticked = true;
tickcount++;
System.out.println(tickcount);
if (tickcount % 60 == 0) {
System.out.println(frames + " FPS");
previoustime += 1000;
frames = 0;
}
}
if (ticked) {
render();
frames++;
}
render();
frames++;
}
Этот код не был объяснен в учебнике я нашел его в Может кто-то пожалуйста, разорвать этот вниз. и объяснить это? Я также посмотрел here на идеи, и последний фрагмент кода на этой странице с потоком рендеринга и потоком обновлений имеет для меня большой смысл. Какой метод использовать? Один из вышеперечисленных, или что-то совершенно другое? Кроме того, вы, вероятно, можете сказать, что это мой первый вопрос здесь, в stackoverflow. Спасибо заранее, Джош
Благодарим за быстрый ответ, но, к сожалению, я уже почти ничего не знал о коде. –
Что конкретно вы хотели бы узнать? Я объяснил все важные моменты в опубликованном коде. Есть ли что-то еще, что вы хотели бы, чтобы я просмотрел? –
Возможно, вам нужно сравнить многопоточные обновления игр и обновления одной нити? –