2016-03-26 12 views
0

Oyunum var ve bir seviyeyi tamamladığınızda 25 altın kazanırsın. İstediğim şey, tekrar oynayabiliyor ve 25 altın kazanacak olursam 50 altın alabileceğim.LibGDX Varolan değere nasıl değer ekleyebilirim?

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

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

ben gibi bir şey yazmak gerektiğini düşünüyorum:

goldCoin + gold 

goldCoin kazandığım ne olduğunu bende bu var ama yığını edemez, oyun yalnızca geçerli oyun 25 altın hatırlamak Mevcut oyundan aldığım toplam ve altın.

, İşte

tüm kod geçerli:

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(); 
} 
+0

Altın Nedir? – Gendarme

+0

altın 0'dır ve bir seviyeyi tamamladığınızda 25 altın alırsınız. – Filip

+0

Bize daha fazla kod göstermeniz gerekiyor. Kodu sadece programınızın bir yönteminin arkasında sağladınız. Tüm sınıfı gösterin ve çok fazla ise gereksiz tüm yöntemleri ve alanları kaldırın. – Gendarme

cevap

1
sorun altın için iki değişken olduğunu gibi görünüyor

:

private static Integer gold;

private static int gCoin;

Sizin addGold() yöntem güncellemeleri gold ama asla henüz tercihlerinizi gCoin gCoin = prefs.getInteger("goldCoin", 0);

numaralı telefondan gCoin değerini alır
+0

Bu benim problemimi çözdü! Teşekkür ederim :) – Filip

0

goldHud2 örneklerinin kendi gold değişkeni yok, yani durağan. Yazdığınız çünkü Hud2 bir örneğini oluşturmak her seferinde, 0 için gold ayarlayın:

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

ben size kod yazdım bilmiyorum, ama tüm balık ... inanılmaz görünüyor. Statik ve statik olmayan alanları ve çılgın gibi yöntemleri karıştırıyorsunuz. Dürüst olmak gerekirse, muhtemelen tüm sınıfı yeniden yazmanız gerekir, ancak hızlı bir düzeltme istiyorsanız, benim tahminim yapıcıdan gold = 0'u kaldırabilmeniz ve bunun yerine bunu bildirdiğinizde başlatabilmenizdir. Şunun gibi:

private static Integer gold = 0;

İlgili konular