Java 高分不保存在Libgdx中

Java 高分不保存在Libgdx中,java,android,libgdx,Java,Android,Libgdx,所以我有两种显示分数的位图字体,一种用于当前分数,另一种用于高分。当前分数的文本工作正常,但高分的文本不会增加或保存值 这是我的代码: if (manager.score > highScore){ highScore = manager.score; preferences.putInteger("highScore", highScore); int getHighScore; getH

所以我有两种显示分数的位图字体,一种用于当前分数,另一种用于高分。当前分数的文本工作正常,但高分的文本不会增加或保存值

这是我的代码:

 if (manager.score > highScore){
            highScore = manager.score;
            preferences.putInteger("highScore", highScore);

            int getHighScore;
            getHighScore = preferences.getInteger("highScore", highScore);
            this.highScoreFont.draw(batch, "" + getHighScore, Gdx.graphics.getWidth() - 1070, Gdx.graphics.getHeight() - 650);
            preferences.flush();
        }
我做错了什么

GameManager类

 public void checkCollisions(){
        Iterator<Bullet> it = activeBullets.iterator();
        Iterator<BlueMonster> blueMonsterIT = this.blueMonsterArray.iterator();

        Bullet bullet;
        BlueMonster bMonster;

        while (it.hasNext()){
            bullet = it.next();

            while (blueMonsterIT.hasNext()){
            bMonster = blueMonsterIT.next();
            boolean collision = Intersector.overlaps(bullet.getRect(), bMonster.getRect());

            if (collision == true){

                score++;
                gameScreen.highScore ++;

                sound = Gdx.audio.newSound(Gdx.files.internal("eksplozijaZvuk.ogg"));
                sound.play();
                Hit hit = hitPool.obtain();
                hit.init(bullet.getX(), bullet.getY());
                gameStage.addActor(hit);
                activeHitMarkers.add(hit);

                collision = false;
                activeBullets.removeValue(bullet, true);
                bullet.remove();
                bulletPool.free(bullet);

                bMonster.remove();
                blueMonsterArray.removeValue(bMonster, true);
                blueMonsterPool.free(bMonster);

                Timer.schedule(new Timer.Task() {
                    @Override
                    public void run() {
                        Iterator<Hit> it = activeHitMarkers.iterator();
                        while (it.hasNext()){
                            Hit hit = it.next();
                            hitPool.free(hit);
                            hit.remove();
                            activeHitMarkers.removeValue(hit, true);
                        }
                    }
                }, 0.1f);
            }
        }
        }
    }
请注意,首选项是全局初始化的,您应该调用

preferences.flush();
紧接着

preferences.putInteger("highScore", highScore);
所以最终版本应该是

preferences.putInteger("highScore", highScore);    
preferences.flush();

int getHighScore;
getHighScore = preferences.getInteger("highScore", highScore);

您还应该删除该行

gameScreen.highScore ++;

从您的
GameManager
课程-highscore只能在您的情况下进行修改不要忘记使用0或当前首选项的值初始化
高分

是的,我这样做了,但它仍然无法保存。您确定您的程序处于这种状态吗?尝试从
if
注销一些东西,我在.flush()之后放了一个日志,它似乎甚至没有处理那个if语句。我应该怎么做?然后在if语句之前添加log,以检查您的manager.score是否没有增加,或者您的highscore是否有一些不正确的值。
highscore
是局部变量吗?您应该初始化它,然后highscore和score都会正确递增,但highscore不会保存
gameScreen.highScore ++;