libgdx оставить экран и жизненный цикл экрана
Следующая команда:
game.setScreen(new GameScreen());
Запускает вас на новый экран, похожий на Android startActivity()
.
finish()
)?
Кроме того, есть ли график, показывающий жизненный цикл экрана для LibGDX
, подобный Android?
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();
себя,а затем переадресуйте все события на второй экран в вашем первом.