如何在LibGDX中初始化首选项值?

时间:2016-05-30 16:58:29

标签: java libgdx preferences

我使用偏好设置将游戏中的声音设置保存为布尔值。但是,当我第一次开始游戏时,布尔值初始化为false(声音关闭),因为我没有在别处初始化它。我可以在创建方法中将其初始化为true,但是每次开始游戏时游戏都会以声音开始,这只会打败偏好的目的。

否则它工作正常,只是我希望首次启动游戏时布尔值初始化为true,而不是每次重新启动它。

有没有办法在首选项中执行此操作,还是必须使用其他类型的保存方法?

注意:这是一个桌面应用程序

3 个答案:

答案 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);
}