Решение Fili не работает для некоторых людей, поэтому я подозреваю, что оно спит до момента, следующего за следующей vsync, а не сразу.Я также чувствую, что перемещение режима сна в конец функции даст лучшие результаты, потому что там он может дополнить текущий кадр перед следующим vsync, вместо того, чтобы пытаться компенсировать предыдущий.Thread.sleep () неточен, но, к счастью, нам нужно только, чтобы он был точным с точностью до ближайшего периода vsync 1/60 с.Код LWJGL tyrondis опубликовал ссылку, которая кажется слишком сложной для этой ситуации, вероятно, она предназначена для случаев, когда vsync отключен или недоступен, чего не должно быть в контексте этого вопроса.
Я бы попробовал кое-чтокак это:
private long lastTick = System.currentTimeMillis();
public void onDrawFrame(GL10 gl)
{
UpdateGame(dt);
RenderGame(gl);
// Subtract 10 from the desired period of 33ms to make generous
// allowance for overhead and inaccuracy; vsync will take up the slack
long nextTick = lastTick + 23;
long now;
while ((now = System.currentTimeMillis()) < nextTick)
Thread.sleep(nextTick - now);
lastTick = now;
}