2016-05-30 19 views
0

Ich verwende Einstellungen, um die Soundeinstellungen in meinem Spiel als booleschen Wert zu speichern. Wenn ich das Spiel zum ersten Mal starte, initialisiert der Boolesche Wert auf false (Ton aus), weil ich ihn nicht an anderer Stelle initialisiere. Ich könnte es in der Create-Methode auf true initialisieren, aber dann würde das Spiel bei jedem Start des Spiels mit Sounds beginnen, und das würde nur den Zweck der Vorlieben zunichte machen.Wie Voreinstellung Wert einmal in LibGDX initialisieren?

Ansonsten funktioniert es gut, es ist nur, dass ich möchte, dass der Boolesche Wert beim ersten Start des Spiels auf "true" gesetzt wird und nicht bei jedem Neustart.

Gibt es eine Möglichkeit, dies mit Vorlieben zu tun, oder muss ich eine andere Art von Speichermethode verwenden?

Hinweis: Dies ist eine Desktop-Anwendung

Antwort

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

Sie sollten wirklich versuchen, den Flush Anrufe zu begrenzen, da die Datei io ein wenig Zeit in Anspruch nehmen kann und macht Ihre Anwendung langsamer . Offensichtlich wird es im aktuellen Fall nicht viel ausmachen. –

0

ich Ihnen einen etwas anderen Ansatz vorschlagen würde:

Erstens denke ich, dass der perfekte Ort Prefs zu initialisieren create Methode des Hauptes ist Spielklasse (das, die extends Game):

public void create() { 
    Prefs.initPrefs(); 
    ....other initialization.... 
} 

Dann initPrefs Methode wie folgt aussieht:

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

Und schließlich die Musik zu wechseln:

public static boolean isMusicOn() { 
    return pref.getBoolean(MUSIC_ON); 
} 

public static void toggleMusic() { 
    pref.putBoolean(MUSIC_ON, !isMusicOn()); 
    pref.flush(); 
}