libgdx оставить экран и жизненный цикл экрана


Следующая команда:

game.setScreen(new GameScreen());

Запускает вас на новый экран, похожий на Android startActivity().

Но тогда как вы покидаете экран и возвращаете экран, который вызвал вас (подобно Android finish())?

Кроме того, есть ли график, показывающий жизненный цикл экрана для LibGDX, подобный Android?

1 3

1 ответ:

Жизненный цикл экрана на самом деле почти такой же, как жизненный цикл Android, потому что это то, что они должны были охватить при разработке libgdx. В основном события обратного вызова жизненного цикла Android просто перенаправляются в LibGDX ApplicationListener, который, в свою очередь, перенаправляет их в ваш Game, который, в свою очередь, перенаправляет их в ваш Screen.

Жизненный цикл обычно выглядит так (используя терминологию Screen):
           __________________________________
           |         ____       ____        |
           V         V   |      V  |        |
show --> resume --> resize <-- render --> pause --> hide --> dispose
           |          |          ^          ^
           |__________|__________|__________|

Вы можете видеть, что показывают, а скрывают, как правило, вызывается только один раз. show() будет называться в начале, когда ваш Screen установлен как текущий, hide() будет вызван, когда вы измените экран. Обратите внимание, что dispose() не выделяется автоматически, поэтому вы должны обязательно вызвать его при переключении экрана или вызвать его в своем методе hide().

resume() и pause() можно вызвать несколько раз, но по крайней мере один раз. Переключение на другое приложение или рабочий стол вызовет еще один цикл pause -> resume.

render() и resize() обычно называют много, но не обязательно в любом конкретный заказ. Изменение размера окна на рабочем столе может вызвать множество вызовов resize() подряд, без какого-либо вызова render() между ними. Но, конечно, resize() также можно полностью пропустить.

Если вы хотите вернуться к экрану, который уже был виден раньше, то вам нужно дать второму экрану ссылку на первый, чтобы он снова мог быть установлен в качестве текущего экрана. Но это также вызовет целый жизненный цикл с самого начала.

Другим вариантом было бы сохранить второй экран как свойство первого экрана и" эмулировать " экран переключитесь сами, вызвав screen2.show(); screen2.resume(); себя,а затем переадресуйте все события на второй экран в вашем первом.