2015-04-22 4 views
0

Im изо всех сил, чтобы понять, как сохранить/прочитать булевы от предпочтений в LIBGDX. То, что я использую для них, это то, что пользователь купил элемент, тогда логическое значение должно быть истинным и быть сохранено как true, пока другое логическое значение не станет истинным, тогда первое будет ошибочным. Надеюсь, что я действительно понимаю.Сохранение булевы в настройках

Это то, что I've сделано:

экрана, где они делают покупки и нажимает на кнопку, чтобы сделать изменения:

PurcScreen implements Screen { 
changeStone1.addListener(new ChangeListener() { 

     @Override 
     public void changed(ChangeEvent event, Actor actor) { 
      ss.prefs.getBoolean("stone1", true); 
      game.setScreen(ss); 
     } 

    }); 

И это экран, на котором объект они приобрели должны составляется в зависимости от Wether или нет логического значения истинно/ложно:

MainScreen implements Screen { 
public boolean stone1, stone2 
public MainScreen { 
stone1 = prefs.getBoolean("stone1"); 
stone2 = prefs.getBoolean("stone2"); 
if(stone1){ 
    setStone1(); 

    } 
    if(stone2){ 
     setStone2(); 
    } 
show() { 
if(stone1) { 
     setStone2(); 
     prefs.putBoolean("stone1", true); 
     prefs.putBoolean("stone2", false); 
} 
if(stone2) { 
     setStone2(); 
     prefs.putBoolean("stone1", false); 
     prefs.putBoolean("stone2", true); 
} 
btnSave.addListener(new ChangeListener() { 
@override 
public void changed(ChangeEvent event, Actor actor) { 
prefs.putBoolean("stone1", stone1); 
prefs.putBoolean("stone2", stone2); 
prefs.flush(); 
} 

с помощью этого кода, в булевы arn't хранится. Образуется изображение/объект stone2. Но когда я нажимаю кнопку «SaveButton» и снова вводит экран, оригинальный объект stone1 снова рисуется.

+0

Это не ответ, но я просто хотел бы отметить, что если вы хотите, чтобы избежать обмана, используя встроенный в настройках не лучший способ LibGDX, особенно если вы план развертывания на рабочем столе. На рабочем столе всем игрокам нужно будет отредактировать простой XML-файл и изменить значение на true. Я бы предложил создать вашу собственную систему сбережений и зашифровать ее. – vedi0boy

+0

Спасибо за ввод. Im noy развертывание на рабочий стол. – Benni

+0

Bradley, commit() больше не существует. Это из старой версии libgdx. – Benni

ответ

1

Получит ваши предпочтения объект из рамок (убедитесь, что вы получите такое же имя при чтении и записи)

Preferences prefs = Gdx.app.getPreferences("My Preferences"); 

Сохранить булев на преф объект:

prefs.putBoolean("soundOn", true); 
prefs.flush(); 

Читайте булево от префов объекта:

prefs.getBoolean("soundOn"); 

Ссылка вики:

https://github.com/libgdx/libgdx/wiki/Preferences

+0

Так строка/значение «soundOn» будет действовать как логическое значение? Мне не нужно фактически объявлять boolean и подключать его к строке, например boolean soundOn = prefs.putBoolean ("soundOn", true)? И если да, могу ли я сделать if (prefs.getBoolean ("soundOn") {do stuff}? – Benni

+0

Строка «soundOn» - это всего лишь ключ к логическому значению. prefs.getBoolean ("soundOn") вернет фактическое логическое значение. Так что да, вы можете это сделать - если (prefs.getBoolean ("soundOn")) {do stuff}. – Barodapride

0

Прежде всего, убедитесь, что вы импортировали правильный .flush зависимость, есть один в обоих Android и Java.

Попробуйте .apply() вместо .flush()

Документация here

Как SharedPreferences случаи одноэлементны внутри процесса, это безопасно заменить любой экземпляр совершить() с применить(), если вы уже не обращая внимания на возвращаемое значение.

Further Reading

+0

Счастье. Я не добавил, что использую рамки Libgdx. У них есть собственный метод хранения предпочтений. – Benni

+0

ладно ладно, дайте мне подумать – BIW

Смежные вопросы