我使用偏好设置将游戏中的声音设置保存为布尔值。但是,当我第一次开始游戏时,布尔值初始化为false(声音关闭),因为我没有在别处初始化它。我可以在创建方法中将其初始化为true,但是每次开始游戏时游戏都会以声音开始,这只会打败偏好的目的。
否则它工作正常,只是我希望首次启动游戏时布尔值初始化为true,而不是每次重新启动它。
有没有办法在首选项中执行此操作,还是必须使用其他类型的保存方法?
注意:这是一个桌面应用程序
答案 0 :(得分:0)
public Preferences getPreferences() {
if (preferences == null) {
preferences = Gdx.app.getPreferences("myPrefs");
}
return preferences;
}
private void generatePreferences() {
getPreferences().clear();
getPreferences().putBoolean("soundEnabled", true).flush();
getPreferences().putBoolean("notFirstLaunch", true).flush();
}
public void loadPreferences() {
if (!getPreferences().getBoolean("notFirstLaunch")) {
generatePreferences();
} else {
//read the prefs and do your stuff
}
}
答案 1 :(得分:0)
我建议你采用一种稍微不同的方法:
首先,我认为初始化prefs的最佳位置是主游戏类的create
方法(extends Game
):
public void create () {
Prefs.initPrefs();
....other initialization....
}
然后,initPrefs
方法如下:
private static final String MUSIC_ON = "music_on";
private static final String LANG = "lang";
public static void initPrefs() {
boolean needChange = false;
if (!pref.contains(MUSIC_ON)) {
pref.putBoolean(MUSIC_ON, true);
needChange = true;
}
//if no lang - select system default
if (!pref.contains(LANG)) {
String language = Locale.getDefault().getLanguage();
pref.putString(LANG, language);
needChange = true;
}
if (needChange) {
pref.flush();
}
}
最后切换音乐:
public static boolean isMusicOn() {
return pref.getBoolean(MUSIC_ON);
}
public static void toggleMusic() {
pref.putBoolean(MUSIC_ON, !isMusicOn());
pref.flush();
}
答案 2 :(得分:0)
我知道这已经有几年了,但以防万一其他人想知道。
我认为您需要做的是在不调用getBoolean()
的情况下向您的flush()
方法添加默认值。
在我的游戏中,我有一个名为isSoundOn()
的方法,当我创建声音按钮时会调用该方法。安装游戏后第一次启动游戏时,您可能不会保存首选项,这意味着以下方法必须默认为某种方式。如果将true添加到getBoolean方法,则您的游戏应初始化为true。
public boolean isSoundOn() {
return preferences.getBoolean("soundOn", true);
}