Я возился с моим настраиваемым игровым движком, который использует API Java2D для рисования на холсте (активный рендеринг).Java2D основанный игровой движок отстает, когда нет ввода
То, что я заметил, это то, что простая сцена с квадратным перемещением становится более гладкой, если я либо активно нажимаю клавиши на клавиатуре своего ноутбука, либо передвигаю мышь вокруг (внутри границ рамки). Если я ничего не делаю, движение кажется вялым.
В моем игровом движке используется фиксированная временная рендеринга, где на один чертеж может появляться несколько обновлений.
Моя структура кадра: JFrame имеет дочерний холст, в котором используется поток для выполнения обновления/рендеринга.
Операционная система - это Linux, может быть проблема с фокусом? Счетчик FPS сообщает о том же fps в обоих случаях.
Мой код цикла заключается в следующем:
while(active) {
g = (Graphics2D) bs.getDrawGraphics();
now = System.currentTimeMillis();
double delta = now - prev;
while(delta >= 0) {
update(dt);
updateTicks++;
delta -= dt;
}
render(g);
bs.show();
if(System.currentTimeMillis() - fpsTimer > 1000) {
fpsTimer += 1000;
System.out.printf("FPS: %d\n", updateTicks);
updateTicks = 0;
}
prev = now;
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Я не думаю, что это проблема, хотя.
обновление: есть небольшое падение кадров в секунду: 5/7 обновлений в секунду, если не обеспечить ввод в frame..Something происходит за кулисами ..
Вы проверили временной интервал между тиками, чтобы быть уверенным, что это определенно фиксированные шаги времени? – ManoDestra
Да, это фиксированный временной шаг, потому что я применяю его в своем коде. Но это не главная проблема. Я спрашиваю себя, почему увеличение плавности, если я перемещаю мышь над рамкой. – Warrior
Я подозреваю, что он заставляет дополнительные перерисовки холста путем аннулирования области из-за того, что мышь находится над холстом/кадром. – ManoDestra