所以我构建了一个类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;
}
}
问题在于,当我在较早的游戏之后再次开始游戏时,高分不会加载,它会返回零...
我已经完成了清单权限:
由于 ///丹尼尔
聚苯乙烯。在最后一个答案中,我说它适用于某些设备,但我后来发现并非如此。
答案 0 :(得分: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。
Edit2:
好的,我们已经确认某些设备上的Gdx存在问题(很糟糕)。
如果您真的需要在桌面和Android设备上进行此项工作,还有另一种方法。如果你只是想让你的游戏在Android上工作,你就不应该使用Gdx来保存数据。
我建议您使用称为GDX Android界面的东西。这样您就可以使用本答案中使用的原生Android调用自行处理在Android设备上保存数据。这不是很容易,但这里有一个教程:
https://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup
答案 1 :(得分: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);
}
}
保存HighScore 。
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();
}
此代码正常运行。并使用这个我确定它的对你有用。
答案 2 :(得分: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或手机本身有关。