разблокировка уровней в логике игры для андроид - PullRequest
3 голосов
/ 09 марта 2012

У меня есть сцена уровня, которая позволяет пользователю выбрать уровень.

Но чтобы перейти на следующий уровень, пользователь должен пройти уровень до него.

Сейчаспервый уровень, который автоматически разблокируется.

Когда он будет завершен, я хочу разблокировать второй уровень.и когда второй уровень будет завершен, разблокируйте третий уровень.

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

Я мог бы использовать некоторую помощь по логике, стоящей за этим.

Кто-нибудь может мне помочь?РЕДАКТИРОВАТЬ:

В моей игровой сцене, когда игра завершена, я называю это для sharedpreference

editor.putString("level_completed"+level, "unlocked");
editor.commit();

Тогда я делаю ..

String levelStatus = preference.getString("level_completed:"+level, "locked");

if(levelStatus.equals("unlocked")){

}else{
    if(level == 0){
        box.setUserData("unlocked");
}else{
        box.setColor(1.0f,0.0f,0.0f);
        box.setUserData("locked");
    }
}

в сцене выбора уровнячтобы проверить, разблокирован ли уровень.

Это, кажется, не работает хорошо.Уровень, который должен быть разблокирован, не разблокирован.

Ответы [ 3 ]

3 голосов
/ 09 марта 2012

Есть несколько способов приблизиться к нему. Если прогрессия всегда линейна (1, 2, 3, 4), тогда вы можете просто сохранить целое число для «максимального разблокированного уровня» и затем обновлять его всякий раз, когда завершаете уровень. В противном случае у вас также может быть много логических значений, таких как «уровень 2 разблокирован», а когда вы завершите уровень 1, вы можете установить «уровень 2 разблокирован» в значение true. Общие предпочтения - это, безусловно, разумный путь.

2 голосов
/ 09 марта 2012

В какой-то момент, если ваша игра не перезапускается с самого начала каждый раз, когда пользователь немного делает что-то еще, вы сохраняете состояние игры. Вы сохраняете счет пользователя, состояние игры и т. Д. При этом, как бы вы это ни делали, сохраняются и разблокированные уровни. Это только один бит информации на уровень, так что вам не нужно быть умным об этом. Возможно, у вас также есть кнопка «Сохранить», сохранение файлов, возможность загрузки из сохранения. Опять же, просто добавьте разблокировку уровня пользователя, когда вы сохраняете все остальное.

Или вы еще ничего не начали сохранять?

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

2 голосов
/ 09 марта 2012

Что я хотел бы сделать, так это посмотреть на объектно-ориентированную перспективу, а это то, чем занимается Java. Когда я застреваю на куске кода, я записываю его. Подумайте, какова цель кода.

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

  • Возможно, у вас также есть некоторый класс Player, так что вы можете иметь свойство unlockedLevels типа Level []. Тогда все разблокированные уровни будут в этом массиве уровней.

Это все о том, как ваш код структурирован, структура и истинная объектная ориентация - самые важные вещи в Java. Когда вы отклоняетесь от объектно-ориентированного проектирования, вы можете столкнуться с проблемами, которых никогда не должно было быть.

...