3

所以我构建了一个SaveAndLoad如下所示的类:

public class SaveAndLoad {
    public Preferences pref;
    public final String path = "Highscore";

    public SaveAndLoad() {
        pref = Gdx.app.getPreferences("Gametitle");
    }

    public void saveInt(int value) {
        pref.putInteger(path, value);
        pref.flush();
    }

    public int getInt() {
        return pref.getInteger(path);
    }
}

当我试图保存我的高分时,我打电话saveInt(highscore),当你再次打开游戏时,我打电话getInt

    constructor(){
        SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
            highscore = sdRemote.getInt();
      } catch (NullPointerException e) {
            highscore = 0;
      }
    }

问题是当我在较早的游戏之后再次开始游戏时,高分不加载,它返回零......

我已经完成了清单许可:

谢谢///丹尼尔

附言。在最后一个答案中,我说它适用于某些设备,但后来我发现事实并非如此。

4

3 回答 3

5

确保您检索这样的数据:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
int silent = settings.getInt("score", 0);

并像这样保存它:

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putInt("score", playerScore);
  // Commit the edits!
  editor.commit(); //<----------

编辑:

啊,你正在使用 GDX。在这种情况下,请确保在 GDX 初始化后初始化此类。检查是否Gdx.app.getPreferences("Game");返回 null。

编辑2:

好的,所以我们已经确认某些设备上的 Gdx 存在问题(这很糟糕)。

如果您真的需要在桌面设备和 Android 设备上进行这项工作,还有另一种方法。如果您只想让您的游戏在 Android 上运行,您根本不应该使用 Gdx 来保存数据。

我建议你使用一种叫做 GDX And​​roid 界面的东西。这样,您可以使用我在此答案中使用的本机 Android 调用自己处理在 Android 设备上保存数据。虽然这并不容易,但这里有一个教程:

https://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup

于 2013-03-09T14:44:03.017 回答
2

您可以从中存储检索 数据

以下方法的代码。

public class SaveAndLoad {
        public SharedPreferences pref;
        public final String path = "Highscore";

        public SaveAndLoad() {
            pref = Gdx.app.getSharedPreferences("Gametitle",MODE_PRIVATE);
        }

        public void saveInt(int value) {
        Editor edit = pref.edit();
            edit.putInt(path, value);
            edit.commit();
        }

        public int getInt() {
            return pref.getInt(path,0);
        }
}

保存高分

int highscore = 0;
SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
        highscore = sdRemote.getInt();
    } catch (NullPointerException e) {
        e.printStackTrace();
    }

获取HighScore

int highscore = 255;
SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
        sdRemote.saveInt(highscore);
    } catch (NullPointerException e) {
        e.printStackTrace();
    }

这段代码对我来说正常工作。并使用它,我相信它对你有用

于 2013-03-22T17:07:25.707 回答
0

从它的声音来看,您所做的一切都是正确的,这使我们可以选择测试有问题的设备。如果您可以在设备上运行以下应用程序侦听器,并查看每次在设备上运行应用程序时 MyValue 是否在增加。

public class PrefTest implements ApplicationListener {
    @Override public void create() {
        final Preferences pref = Gdx.app.getPreferences("TestApp");
        int value = pref.getInteger("MyValue", 0);
        Gdx.app.log("MyValue", Integer.toString(value));
        value++;
        pref.putInteger("MyValue", value);
        pref.flush();
    }

    @Override public void render() {}

    @Override public void dispose() {}

    @Override public void resize(final int width, final int height) {}

    @Override public void pause() {}

    @Override public void resume() {}
}

每次启动应用程序时,您都应该看到 LogCat 中的值增加。例如,安装应用程序并运行,退出并从图标启动,重复退出并启动。如果这可行,那么我们知道问题与您的代码有关。如果这不起作用,那么我们知道问题出在 LibGDX 或手机本身。

于 2013-03-17T18:34:45.670 回答