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();себя,а затем переадресуйте все события на второй экран в вашем первом.