В каких методах следует сохранять/загружать игровое состояние

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

В моей игре libGDX есть несколько экранов, и пара из них — MainMenuScreen и MainSceneScreen, они унаследованы от класса Screen. MainMenuScreen отображается в начале игры, а MainSceneScreen чуть позже.

В чем проблема? Я перешел на MainSceneScreen и заставил Android остановить приложение (для этого я изменил языковые настройки на устройстве). После этого я снова выбираю приложение и вижу, что отображается MainMenuScreen. Но я хочу, чтобы MainSceneScreen отображался.

Я полагаю, мне следует переопределить метод resume. Но какой? У меня есть класс PsGame, который расширяет класс Game библиотеки libgdx. Я поставил точки останова на его метод resume и оказалось, что этот метод не был вызван. Я исследовал проблему и нашел этот странный код в методе onResume класса AndroidApplication в libGDX:

    if (!firstResume)
        graphics.resume();
    else
        firstResume = false;

Мой отладчик сказал, что firstResume верно и не переходит к строке graphics.resume().

  1. Что я сделал не так?
  2. Какие методы следует переопределить?

person vedi    schedule 15.02.2012    source источник
comment
Попробуйте опубликовать свой вопрос на gamedev.stackexchange.com вместо этого :)   -  person Jens Schwarzer    schedule 16.02.2012
comment
LOL - ты уже сделал это :о)   -  person Jens Schwarzer    schedule 16.02.2012


Ответы (1)


Я думаю, вы правильно сузили это, и вы должны восстановить сохраненное состояние во время вызова метода resume в вашем подклассе Game. Это должно быть вызвано, если вы переключитесь на какое-то другое приложение на некоторое время, а затем снова переключитесь на свое приложение (без выполнения шагов, которые приведут к завершению работы приложения). По какой-то причине libgdx не перенаправляет вызов resume для начального запуска (этот дизайн, вероятно, является хорошей идеей в долгосрочной перспективе, но немного сбивает с толку при запуске). Достаточно просто вызвать ваш код восстановления из метода create в вашем Game (который вызывается только при запуске приложения), чтобы при первом запуске вашей игры было поведение «возобновление».

person P.T.    schedule 16.02.2012