Я пытаюсь создать экран паузы поверх своего игрового экрана (где пользователь играет в игру)

Я пытаюсь создать экран паузы в java с помощью libgdx.

Моя проблема в том, что я пытаюсь создать экран поверх экрана воспроизведения, поэтому, когда пользователь нажимает кнопку «p», игра будет приостановлена; состояние игры останется таким же, как и в том месте, где пользователь остановился, и когда они нажмут кнопку возобновления, они будут возвращены на экран воспроизведения, возобновив текущее состояние игры.

Прямо сейчас я реализовал экран паузы, где пользователь нажимает «p», и они будут отправлены на совершенно новый экран, где отображается кнопка возобновления. Теперь, когда пользователь нажимает кнопку «Возобновить», он отправляет пользователя обратно на экран воспроизведения, но полностью перезапускает его для них. По какой-то причине он не вернется в то состояние, в котором его оставили.

Любая помощь будет очень высоко ценится. Т

«По какой-то причине он не вернется в то состояние, в котором его оставили». - причина в том, что вы создаете этот экран с самого начала. Вы должны либо каким-то образом сериализовать состояние экрана, а затем загрузить его, либо использовать какой-нибудь трюк, чтобы «заморозить» игру, закрыть этим экраном паузы, а затем раскрыть и позволить ему снова запуститься.

m.antkowicz 29.11.2018 22:58

«по какой-то причине» Мы можем сказать вам, в чем именно эта причина, если вы покажете свой код. Но если вы хотите, чтобы ваш экран паузы был прозрачным для вашего игрового экрана, вам нужно либо создать свой собственный класс Game, который может рисовать несколько экранов одновременно, либо поместить все функции паузы на тот же экран, что и ваша игра.

Tenfour04 30.11.2018 15:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это связано с тем, что в приложении LibGDX вы заменяете активный экран, который уничтожает предыдущий.

Если вы ставите игру на паузу и не хотите уходить с игрового экрана, вы можете настроить логическое значение (isPaused) на игровом экране. Если это так, не обновляйте элементы игры и не отображайте меню паузы. Если false, ваша игра обновляется.

Преимущество: это означает, что вам не нужно сохранять все игровые данные, поскольку они все еще находятся в памяти.

Недостаток: ваше меню паузы будет скорее компонентом наложения, чем собственным экраном, но для пользователя оно все равно может выглядеть так, как вы хотите. ;)

Привет, Роберт! Я новичок в программировании на Java, поэтому, пожалуйста, простите меня, если я покажусь "глупым", но будет ли это что-то вроде: if (isPaused == true) {// EMPTY} else {// RUN RENDER CODE}

ehsaan ali 30.11.2018 19:36

Да! Вы можете сделать что-то вроде if (is Paused) {renderPauseMenu ()} else {renderGame ()} и применить ту же логику к циклу обновления.

Robert O'Connor 01.12.2018 20:19

Ура, приятель, ценю это. ive удалось осмыслить это сейчас. Единственная проблема, с которой я сейчас сталкиваюсь, заключается в том, что всякий раз, когда я нажимаю «P» для перехода в меню паузы, оно появляется, но появляется позади всего остального на экране ... Любая причина по этому поводу? Заранее спасибо.

ehsaan ali 01.12.2018 21:24

Это проблема с порядком, в котором вы выполняете рендеринг. Если вы хотите, чтобы меню паузы отображалось поверх вашей игры, вы должны поместить его в последний раз в методе рендеринга. render () {renderGameWorld () if (isPaused) renderPauseMenu ()}

Robert O'Connor 03.12.2018 08:24

Другие вопросы по теме