【问题标题】:How correctly save game progress via libGDX Preferences on Android devices?如何在 Android 设备上通过 libGDX Preferences 正确保存游戏进度?
【发布时间】:2012-07-23 12:33:12
【问题描述】:

我正在使用下一个代码。 此代码在桌面版本上运行良好,但在 Android 设备上却不行。 返回 Gdx.app.getPreferences(PREFS_NAME) 始终为空。 为什么?哪里会出错?

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Preferences;

public class BeatlesPreferences {
    // constants
    private static final String PREF_VIBRO = "vibro";
    private static final String PREF_MUSIC_ENABLED = "musicenabled";
    private static final String PREF_SOUND_ENABLED = "soundenabled";
    private static final String PREFS_NAME = "my_app";

    public BeatlesPreferences() {
    }

    protected Preferences getPrefs() {
        return Gdx.app.getPreferences(PREFS_NAME);
    }

    public boolean isSoundEffectsEnabled() {
        return getPrefs().getBoolean(PREF_SOUND_ENABLED, true);
    }

    public void setSoundEffectsEnabled(boolean soundEffectsEnabled) {
        getPrefs().putBoolean(PREF_SOUND_ENABLED, soundEffectsEnabled);
        getPrefs().flush();
    }

    public boolean isMusicEnabled() {
        return getPrefs().getBoolean(PREF_MUSIC_ENABLED, true);
    }

    public void setMusicEnabled(boolean musicEnabled) {  
        getPrefs().putBoolean(PREF_MUSIC_ENABLED, musicEnabled);
        getPrefs().flush();
    }

    public boolean isVibroEnabled() {
        return getPrefs().getBoolean(PREF_VIBRO, true);
    }

    public void setVibroEnabled(boolean vibro) {
        getPrefs().putBoolean(PREF_VIBRO, vibro);
        getPrefs().flush();
    }
}

【问题讨论】:

  • 请包含错误堆栈跟踪。我怀疑您在 Gdx.app 初始化之前到达getPrefs(尽管这应该与桌面类似)。您应该考虑添加一些 assert 检查 Gdx.app 是否为非 null 以区别于 getPreferences 返回 null 等。

标签: java android libgdx


【解决方案1】:

这样使用:

   private Preferences preferences;
   protected Preferences getPrefs() {
      if(preferences==null){
         preferences = Gdx.app.getPreferences(PREFS_NAME);
      }
   return preferences;
   }

【讨论】:

    【解决方案2】:

    您没有在代码中以任何方式在 .prefs 中设置应用程序的名称。添加名称,就像添加音乐、振动...等一样

    public void setPREFS_NAME() {
        getPrefs().putBoolean("PREFS_NAME", PREFS_NAME);
        getPrefs().flush();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多