Я пытаюсь создать экран паузы в java с помощью libgdx.
Моя проблема в том, что я пытаюсь создать экран поверх экрана воспроизведения, поэтому, когда пользователь нажимает кнопку «p», игра будет приостановлена; состояние игры останется таким же, как и в том месте, где пользователь остановился, и когда они нажмут кнопку возобновления, они будут возвращены на экран воспроизведения, возобновив текущее состояние игры.
Прямо сейчас я реализовал экран паузы, где пользователь нажимает «p», и они будут отправлены на совершенно новый экран, где отображается кнопка возобновления. Теперь, когда пользователь нажимает кнопку «Возобновить», он отправляет пользователя обратно на экран воспроизведения, но полностью перезапускает его для них. По какой-то причине он не вернется в то состояние, в котором его оставили.
Любая помощь будет очень высоко ценится. Т
«по какой-то причине» Мы можем сказать вам, в чем именно эта причина, если вы покажете свой код. Но если вы хотите, чтобы ваш экран паузы был прозрачным для вашего игрового экрана, вам нужно либо создать свой собственный класс Game, который может рисовать несколько экранов одновременно, либо поместить все функции паузы на тот же экран, что и ваша игра.




Это связано с тем, что в приложении LibGDX вы заменяете активный экран, который уничтожает предыдущий.
Если вы ставите игру на паузу и не хотите уходить с игрового экрана, вы можете настроить логическое значение (isPaused) на игровом экране. Если это так, не обновляйте элементы игры и не отображайте меню паузы. Если false, ваша игра обновляется.
Преимущество: это означает, что вам не нужно сохранять все игровые данные, поскольку они все еще находятся в памяти.
Недостаток: ваше меню паузы будет скорее компонентом наложения, чем собственным экраном, но для пользователя оно все равно может выглядеть так, как вы хотите. ;)
Привет, Роберт! Я новичок в программировании на Java, поэтому, пожалуйста, простите меня, если я покажусь "глупым", но будет ли это что-то вроде: if (isPaused == true) {// EMPTY} else {// RUN RENDER CODE}
Да! Вы можете сделать что-то вроде if (is Paused) {renderPauseMenu ()} else {renderGame ()} и применить ту же логику к циклу обновления.
Ура, приятель, ценю это. ive удалось осмыслить это сейчас. Единственная проблема, с которой я сейчас сталкиваюсь, заключается в том, что всякий раз, когда я нажимаю «P» для перехода в меню паузы, оно появляется, но появляется позади всего остального на экране ... Любая причина по этому поводу? Заранее спасибо.
Это проблема с порядком, в котором вы выполняете рендеринг. Если вы хотите, чтобы меню паузы отображалось поверх вашей игры, вы должны поместить его в последний раз в методе рендеринга. render () {renderGameWorld () if (isPaused) renderPauseMenu ()}
«По какой-то причине он не вернется в то состояние, в котором его оставили». - причина в том, что вы создаете этот экран с самого начала. Вы должны либо каким-то образом сериализовать состояние экрана, а затем загрузить его, либо использовать какой-нибудь трюк, чтобы «заморозить» игру, закрыть этим экраном паузы, а затем раскрыть и позволить ему снова запуститься.