2016-08-29 6 views
0

Ich habe ein Sprite, das mit Hindernis kollidiert, aber ich habe ein Problem mit der Punktzahl in der Oberseite meines Bildschirms. In der Aktualisierung meiner Klasse, Die Kollisionen werden von einem Array angegeben, aber wenn es mit einem Objekt kollidiert, wächst die Punktzahl immer noch und ich kann es nicht stoppen. dies ist mein Code:add score in Bildschirm libgdx

private Array<Polen> polen; 
private Score score; 

    public PlayState(GameStateManager gsm) { 
    super(gsm); 
    score = new Score(110, 310); 
    polen = new Array<Polen>(); 
    for(int i = 1; i <= COUNT; i++){ 
     polen.add(new Polen(i * (Polen.WIDTH))); 
    } 
} 

    @Override 
public void update(float dt) { 
    handleInput(); 

    for(int i = 0; i < polen.size; i++){ 
     Polen pol= polen.get(i); 

     if(pol.collides(aliado.getBounds())) { 
      pol.changeExplosion(); 
      flagScore = 1; 
     } 
     if (pol.collides(aliado.getBounds())==false){ 
      flagScore = 0; 
     } 
    } 
    if (flagScore == 1){ 
      Score.count++; 
      flagScore=0; 
      //auxCount = Score.count +1; 

    } 
    score.update(dt); 
    updateGround(); 
    cam.update(); 

} 

Score Klasse:

public class Score {

private static final int MOVEMENT = 70; 
private Vector3 position; 
private Vector3 velocity; 
private Rectangle bounds; 
private Texture texture; 

public Score(int x, int y){ 
    position = new Vector3(x, y, 0); 
    velocity = new Vector3(0, 0, 0); 
    texture = new Texture("score0.png"); 
    bounds = new Rectangle(x, y, ((texture.getWidth())), texture.getHeight()); 
} 

// Code für Schritt die Punktzahl oben auf dem Bildschirm:

public void update(float dt){ 
    if(position.y > 0) 
     velocity.add(0, 0, 0); 
    velocity.scl(dt); 
    position.add(MOVEMENT * dt, velocity.y, 0); 
    if(position.y < 0) 
     position.y = 0; 

    velocity.scl(1/dt); 
    bounds.setPosition(position.x, position.y); 

} 

public Vector3 getPosition() { 
    return position; 
} 

public Texture getTexture() { 
    return texture; 
} 

public void setTexture(Texture texture) { 
    this.texture = texture; 
} 

public Vector3 getVelocity() { 
    return velocity; 
} 

public void setVelocity(Vector3 velocity) { 
    this.velocity = velocity; 
} 

public Rectangle getBounds(){ 
    return bounds; 
} 

public void setBounds(Rectangle bounds) { 
    this.bounds = bounds; 
} 

public void dispose(){ 
    texture.dispose(); 
} 

}

Antwort

1

In pol.changeExplosion() sollten Sie einen booleschen Wert hinzufügen, um das Objekt als erledigt zu markieren.

public class Polen { 
    private boolean exploded = false; 

    public void changeExplosion() { 
    // ... 
    exploded = true; 
    // ... 
    } 

    public boolean isExploded() { 
    return exploded; 
    } 
} 

Dann können Sie in Ihrer Update-Funktion dieses Flag verwenden, um zu bestimmen, ob der Score nicht mehr erhöht werden soll.

for(int i = 0; i < polen.size; i++) { 
    Polen pol= polen.get(i); 

    if(pol.collides(aliado.getBounds()) && !pol.isExploded()) { 
    pol.changeExplosion(); 
    flagScore = 1; 
    } 
    else if (!pol.collides(aliado.getBounds())) { 
    flagScore = 0; 
    } 
} 
Verwandte Themen