Filip
Filip

Reputation: 127

LibGDX How can I add value on already existing value?

I have a game and when you complete a level you earn 25 gold. What I want is that it can stack so if I play again and earn 25 gold I'll now have 50 gold. I have this but I can't stack, the game only remember the 25 gold from the current game:

public static void addgold(int value){
    gold += value;
    gLabel.setText(String.format("%01d", gold));

    prefs.getInteger("gold", 0);
    prefs.putInteger("goldCoin", gold);
    prefs.flush();
}

I think I should write something like:

goldCoin + gold

goldCoin is what I have earned in total and gold is what I get from the current game.

,

Here is all of the code:

public class Hud2 implements Disposable {
private Hud2 hud;
public Stage stage;
private boolean timeUp;
private Viewport viewport;

private Integer worldTimer;
private float timeCount;
private static Integer score;
private static Integer gold;

private boolean keyPressed = false;
private Runner player;
private static RunningGame game;

private TweenManager tweenManager;
public Box2DDebugRenderer b2dr;



private static Label scoreLabel;
private static Label timeLabel;
private static Label gLabel;
private Label levelLabel;
private Label worldLabel;
private Label runLabel;
private Label countdownLabel;
private Label objectiveLabel;


private static int hScore;
private static int gCoin;
private static Preferences prefs;



public Hud2(SpriteBatch sb) {
    worldTimer = 10;
    timeCount = 0;
    score = 0;
    gold = 0;





    viewport = new FitViewport(RunningGame.V_WIDTH, RunningGame.V_HEIGHT, new OrthographicCamera());
    stage = new Stage(viewport, sb);

    Table table = new Table();
    table.top();
    table.setFillParent(true);




    prefs = Gdx.app.getPreferences("PreferenceName");
    hScore = prefs.getInteger("highScore", 0);
    //prefs.putInteger("highScore", 0);

    prefs = Gdx.app.getPreferences("PreferenceGold");
    gCoin = prefs.getInteger("goldCoin", 0);
    //prefs.putInteger("goldCoin", 0);

    countdownLabel = new Label(String.format("%01d", worldTimer), new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.WHITE));
    scoreLabel = new Label((String.format("%01d", score)), new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.WHITE));
    gLabel = new Label((String.format("%01d", gCoin)), new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.WHITE));
    timeLabel = new Label((String.format("%01d", hScore)), new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.WHITE));
    levelLabel = new Label("", new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.WHITE));
    worldLabel = new Label("Level 2", new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.WHITE));
    runLabel = new Label("You won!", new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.RED));
    objectiveLabel = new Label("Objective: 60", new Label.LabelStyle(new BitmapFont(), com.badlogic.gdx.graphics.Color.WHITE));



    table.add(worldLabel).expandX().padTop(10);
    table.add(gLabel).expandX().padTop(10);
    table.add(countdownLabel).expandX().padTop(10);
    table.row();
    table.add(timeLabel).expandX().padTop(10);
    table.add(levelLabel).expandX();
    table.row();
    table.add(timeLabel).expandX();
    table.add(scoreLabel).expandX();
    table.add(objectiveLabel).expandX().padTop(10);


    stage.addActor(table);
}




public void update(float dt) {
    if (score < 1) {
        return;
    }
    timeCount += dt;
    if (timeCount >= 1) {
        if (worldTimer > 0) {
            worldTimer--;
        } else {
            timeUp = true;
        }
        countdownLabel.setText(String.format("%03d", worldTimer));
        timeCount = 0;





        }

        Table table = new Table();
        table.top();
        table.setFillParent(true);
    if (worldTimer == 0)
        if (score >= 60) {
            Hud2.addgold(25);
            table.add(runLabel).expandX().padTop(10);
            ((Game) Gdx.app.getApplicationListener()).setScreen(new com.mygdx.game.Level2.WinScreen2(game));
            stage.addActor(table);






        }

            else if (score <= 59)
                ((Game) Gdx.app.getApplicationListener()).setScreen(new com.mygdx.game.Level2.GameOverScreen2(game));


    }


public static void addscore(int value){
    score += value;
    scoreLabel.setText(String.format("%01d", score));

    prefs.getInteger("score", 0);
    if (score > hScore) {
        prefs.putInteger("highScore", score);
    }
    prefs.flush();
}

public static void addgold(int value){
    gold += value;
    gLabel.setText(String.format("%01d", gold));

    prefs.getInteger("gold", 0);

    prefs.putInteger("goldCoin", gold);
    prefs.flush();
}

Upvotes: 0

Views: 73

Answers (2)

apicellaj
apicellaj

Reputation: 233

The problem seems to be that you have two variables for gold:

private static Integer gold;

private static int gCoin;

Your addGold() method updates gold but never gCoin yet your preferences gets the value of gCoin from gCoin = prefs.getInteger("goldCoin", 0);

Upvotes: 1

RaminS
RaminS

Reputation: 2239

gold is static, meaning that instances of Hud2 do not have their own gold variable. Every time you create an instance of Hud2, you set gold to 0 because you have written:

public Hud2(SpriteBatch sb) {
    [...]
    gold = 0;
    [...]
}

I do not know how you have written your code, but it all looks incredibly... fishy. You are mixing static and non-static fields and methods like crazy. To be honest you should probably rewrite the whole class, but if you want a fast fix, my guess is that you can simply remove gold = 0 from the constructor and instead initialize it when you declare it instead. Like this:

private static Integer gold = 0;

Upvotes: 0

Related Questions