正在保存 Libgdx 中两个 类 的首选项

Saving preferences from two classes in Libgdx

我对首选项有疑问,不知道是否有人可以帮助我? 我正在开发一款带有设置屏幕和游戏屏幕的游戏。两者都需要能够写入相同的首选项。该代码在设置屏幕中有效,如下所示:

public class SettingsScreen implements Screen{
private Preferences prefs;
    final Preferences prefs = Gdx.app.getPreferences("myprefs");
    prefs.putFloat("volume", volume);

并且在游戏屏幕中出现错误。 Gamescreen 中的代码看起来与设置中的代码相同。这有效:

volume = prefs.getFloat("volume", 1);

但这不是:

prefs.putFloat("volume", volume);

我收到以下错误:

Exception in thread "LWJGL Application" java.lang.NullPointerException
    at com.mullenuh.learntoread.Screens.GameScreen.clicked(GameScreen.java:259)
    at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
    at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:58)
    at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
    at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:332)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:124)

您可能在构造函数中有一个名为 "prefs" 的局部变量和也称为 "prefs" 的成员变量,它仍然为空,因为您只将 Preferences 实例分配给局部范围变量。

private Preferences prefs; // class member variable
final Preferences prefs = Gdx.app.getPreferences("myprefs"); // local scope variable

这在您的 SettingsScreen 中起作用的原因可能是因为您在本地范围内对 prefs 进行了调用。

这可能是您想要的:

// class member variable
private final Preferences prefs; 
// constructor:    
this.prefs = Gdx.app.getPreferences("myprefs");