【问题标题】:save data with preferences in libGDX在 libGDX 中使用首选项保存数据
【发布时间】:2015-08-27 02:00:46
【问题描述】:

在我的游戏项目中,我想通过偏好界面保存一些关卡数据,如硬币、游戏等。

我想在我的问题中,数据只是级别编号。 ..................................................... ......................

1) 如果玩家完成关卡_1,则调用此代码保存LEVEL_NUM_

preferences.putInteger("LEVEL_NUM_", getLevelNum());
preferences.flush();

.prefs 的文件:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <entry key="LEVEL_NUM_">1</entry>
    <entry key="SCORE_">3225</entry>
    </properties>

2) 如果玩家完成关卡_2,则再次调用此代码保存LEVEL_NUM_

preferences.putInteger("LEVEL_NUM_", getLevelNum());
preferences.flush();

首选项会更新数据,即将LEVEL_NUM_ 的数据替换为新的LEVEL_NUM_ 数据。

新的.prefs 的文件:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <entry key="LEVEL_NUM_">2</entry>
    <entry key="SCORE_">5995</entry>
    </properties>

我想添加数据(如堆栈)而不是替换数据。我要做什么?

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

    您所需要的只是将您的关卡保存在某个集合中(例如 Array),然后将该集合保存到 Preferences。您需要将此集合转换为 String (没有 putArray() 函数或类似的东西),最好的办法是将它 jsonify。

    JSON 是一种文件格式(类似于 xml,但更轻量),得到了 libgdx 方面的良好支持。实现目标的代码类似于:

        FloatArray levels = new FloatArray();
        levels.add(5993);
        levels.add(5995);
    
        ...
    
        Preferences p = Gdx.app.getPreferences("SETTINGS");
    
        Json json = new Json();
    
        String levelsJson = json.toJson(FloatArray.class, levels);
    
        p.putString("levels", levelsJson);
    

    现在您已经保存了关卡集合,您需要做的就是恢复它:

        FloatArray levels = json.fromJson(FloatArray.class, p.getString("levels");
    

    问候, 米哈乌

    【讨论】:

    • 完美答案。谢谢米哈尔。
    【解决方案2】:

    另一种可能的解决方案是将每个级别的分数存储在它自己的键/值对中,其中键是级别,值是分数:

    preferences.putInteger("LEVEL_NUM_" + getLevelNum(), getScore());
    prefernces.flush();
    

    偏好如下所示:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
       <entry key="LEVEL_NUM_1">3225</entry>
       <entry key="LEVEL_NUM_2">5995</entry>
    </properties>
    

    【讨论】:

    • 非常好的解决方案。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2015-05-03
    • 2022-01-06
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多