DeWiTTERS Игровая петля в LibGDX

Я новичок, и мне нужен полный пример в LibGDX, как ограничить частоту кадров до 50 или 60. Также как интерполяция mangae между игровым состоянием с простым примером кода, например, deWiTTERS Game Loop:

@Override public void render() { float deltaTime = Gdx.graphics.getDeltaTime(); Update(deltaTime); Render(deltaTime); } 

Существует метод Gdx.graphics.setVsync () (generic = backend-independentant), но он отсутствует в 0.9.1, только в Nightlies.

«Опираясь на vsync для фиксированных шагов времени, это ДЕЙСТВИТЕЛЬНО плохая идея. Она будет разбиваться на почти все аппаратные средства там.

См. LwjglApplicationConfiguration, там есть флаг, который позволяет использовать gpu / software vsynching. Играйте с ним »(Марио)

Обратите внимание, что ни одна из этих ограничений не ограничивает частоту кадров конкретным значением … если вам по какой-то причине необходимо ограничить частоту кадров, вам придется обрабатывать ее самостоятельно, возвращаясь из вызовов обработки, если xxx ms не прошло с момента последнего Вызывать вызов.

Как полный игровой движок, которым обладает LibGDX, он обрабатывает такие вещи, как это. Вы можете настроить это в начале игры, по крайней мере, с последними ночными.

 public static void main(String[] args) { LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); cfg.title = "Example"; cfg.useGL20 = false; cfg.width = 800; cfg.height = 480; cfg.vSyncEnabled = true; cfg.foregroundFPS = 60; new LwjglApplication(new ExampleGame(), cfg); } 

Теперь ваш цикл рендеринга будет ограничен 60 вызовами в секунду. Что касается фактической реализации, вы должны использовать Game и Screens . Интерфейс Screen уже имеет метод render который может выглядеть следующим образом:

 public void render(deltaTime ) { ... updateAllEntities(deltaTime); ... renderAllEntities(deltaTime); ... } 

Существует только метод render который вызывается LibGDX, но вы можете разделить свое игровое логическое обновление и рендеринг себя, как в приведенном выше примере.