繁体   English   中英

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

[英]How to initialize preference value once in LibGDX?

我正在使用首选项将声音设置保存为布尔值。 但是,当我第一次开始游戏时,布尔值初始化为false(不正确),因为我没有在其他地方对其进行初始化。 我可以在create方法中将其初始化为true,但随后游戏将在每次启动游戏时都以声音开始,而这将违反偏好设置的目的。

否则,它就可以正常工作,只是我希望布尔值在您第一次启动游戏时而不是每次重新启动时都初始化为true。

是否可以通过首选项来执行此操作,还是必须使用其他某种保存方法?

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

    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
        }
    }

我建议您使用稍微不同的方法:

首先,我认为初始化prefs的理想场所是主游戏类( extends Game类)的create方法:

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();
 }

我知道这已经有几年历史了,但以防万一其他人想知道。

我认为您需要做的是在不调用flush()的情况下将默认值添加到getBoolean()方法中。

在我的游戏中,我有一个名为isSoundOn()的方法,当我创建声音按钮时会调用该方法。 安装游戏后第一次启动游戏时,您可能不会保存首选项,这意味着以下方法必须默认为某种方式。 如果将true添加到getBoolean方法,则您的游戏应初始化为true。

public boolean isSoundOn() {
    return preferences.getBoolean("soundOn", true);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM