簡體   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