Gdx Audio sound infinite error

0

I'm creating a didactic game and when the bird collides with some object the sound happens but it gets infinitely repeating it, I can not stop.

public class FlappyBird extends ApplicationAdapter {

private SpriteBatch batch;
private Texture[] passaros;
private Texture fundo;
private Texture canoBaixo;
private Texture canoTopo;
private Texture gameOver;
private Random numeroRandomico;
private BitmapFont fonte;
private BitmapFont mensagem;
private Circle passaroCirculo;
private Rectangle RetanguloCanoTopo;
private Rectangle RetanguloCanoBaixo;
private Sound sound;
private Sound asas;
private Music soundmorreu;
private Sound soundcolisao;

//atributos de configuração
private float larguraDispositivo;
private float alturaDispositivo;
private int estadoJogo = 0;
private int pontuacao = 0;

private float variacao = 0;
private float velocidadeQueda = 0;
private float posicaoInicialVertical;
private float posicaoMovimentoCanoHorizontal;
private float espacoEntreCanos;
private float deltaTime;
private float alturaEntreCanosRandomica;
private boolean marcouPonto; //padrao já é falso

//Camera
private OrthographicCamera camera;
private Viewport viewport;
private final float VIRTUAL_WIDTH = 768;
private final float VIRTUAL_HEIGTH = 1024;

@Override     public void create () {         batch = new SpriteBatch ();         numberRandom = new Random ();         passCircle = new Circle ();       / * RectangleCanoTopo = new Rectangle ();         RetanguloCanoBaixo = new Rectangle ();         shape = new ShapeRenderer (); * /         source = new BitmapFont ();         font.setColor (Color.WHITE);         source.getData (). setScale (6);

    passaros = new Texture[3];
    passaros[0] = new Texture("passaro1.png");
    passaros[1] = new Texture("passaro2.png");
    passaros[2] = new Texture("passaro3.png");
    fundo = new Texture("fundo.png");
    mensagem = new BitmapFont();
    mensagem.setColor(Color.WHITE);
    mensagem.getData().setScale(3);

    canoBaixo = new Texture("cano_baixo.png");
    canoTopo = new Texture("cano_topo.png");
    gameOver = new Texture("game_over.png");
    soundcolisao = Gdx.audio.newSound(Gdx.files.internal("sfx_hit.ogg"));


    sound = Gdx.audio.newSound(Gdx.files.internal("sfx_point.ogg"));
    asas = Gdx.audio.newSound(Gdx.files.internal("sfx_wing.ogg"));
    soundmorreu = Gdx.audio.newMusic(Gdx.files.internal("sfx_die.ogg"));



    /**********
     Configurações da camera
     */
    camera= new OrthographicCamera();
    camera.position.set(VIRTUAL_WIDTH/2, VIRTUAL_HEIGTH/2, 0);
    viewport = new StretchViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGTH, camera);

    larguraDispositivo = VIRTUAL_WIDTH;
    alturaDispositivo = VIRTUAL_HEIGTH;

    posicaoInicialVertical = alturaDispositivo / 2;
    posicaoMovimentoCanoHorizontal = larguraDispositivo;
    espacoEntreCanos = 300;

}

@Override     public void render () {

    camera.update();

    //Limpar frames anteriores
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );

    deltaTime = Gdx.graphics.getDeltaTime();
    //batendo asas
    variacao += deltaTime * 10;
    if(variacao > 2) variacao = 0;

    //estado inicio jogo
    if(estadoJogo == 0){
        if(Gdx.input.justTouched()){
            estadoJogo = 1;
        }
    } else {
        velocidadeQueda++;
        if(posicaoInicialVertical > 0 || velocidadeQueda < 0)
            posicaoInicialVertical = posicaoInicialVertical - velocidadeQueda;

        if(estadoJogo == 1){
            posicaoMovimentoCanoHorizontal -= deltaTime * 200;

            if(Gdx.input.justTouched()){
                velocidadeQueda = -15;
                asas.play(1.0f);

            }

            //verifica se o cano saiu inteiramente da tela
            if(posicaoMovimentoCanoHorizontal < -canoTopo.getWidth()){
                posicaoMovimentoCanoHorizontal = larguraDispositivo;
                alturaEntreCanosRandomica = numeroRandomico.nextInt(400) - 200;
                marcouPonto = false;
            }

            //Verifica pontuação
            if(posicaoMovimentoCanoHorizontal < 120){

                if (!marcouPonto){
                    pontuacao++;
                    marcouPonto = true;
                    sound.play(1.0f);
                }
            }
        }else{// tela gameover
            if( Gdx.input.justTouched() ){
                estadoJogo = 0;
                marcouPonto = false;
                pontuacao = 0;
                velocidadeQueda = 0;

                posicaoInicialVertical = alturaDispositivo / 2;
                posicaoMovimentoCanoHorizontal = larguraDispositivo;
            }
        }


    }// fim else estado jogo 0

// configure camera projection data         batch.setProjectionMatrix (camera.combined);

    batch.begin();
    batch.draw(fundo, 0, 0, larguraDispositivo, alturaDispositivo);
    batch.draw( canoTopo, posicaoMovimentoCanoHorizontal, alturaDispositivo / 2 + espacoEntreCanos / 2 + alturaEntreCanosRandomica);
    batch.draw( canoBaixo, posicaoMovimentoCanoHorizontal, alturaDispositivo / 2 - canoBaixo.getHeight() - espacoEntreCanos / 2 + alturaEntreCanosRandomica );
    batch.draw(passaros[ (int)variacao ], 120, posicaoInicialVertical);
    fonte.draw(batch, String.valueOf(pontuacao), larguraDispositivo / 2, alturaDispositivo - 50);

    if(estadoJogo == 2){

    batch.draw( gameOver, larguraDispositivo / 2 - gameOver.getWidth() / 2, alturaDispositivo / 2);
    mensagem.draw(batch, "Toque para Reiniciar", larguraDispositivo / 2 -200, alturaDispositivo / 2 -gameOver.getHeight() / 2);
    }

    batch.end();

    passaroCirculo.set(120 + passaros[0].getWidth() / 2, 
    posicaoInicialVertical + passaros[0].getHeight() / 2, passaros[0].getWidth() / 2);
    RetanguloCanoBaixo = new Rectangle(
    posicaoMovimentoCanoHorizontal,  alturaDispositivo / 2 - canoBaixo.getHeight() - espacoEntreCanos / 2 + alturaEntreCanosRandomica,
    canoBaixo.getWidth(), canoBaixo.getHeight()
    );
    RetanguloCanoTopo = new Rectangle(
    posicaoMovimentoCanoHorizontal, alturaDispositivo / 2 + espacoEntreCanos / 2 + alturaEntreCanosRandomica,
    canoTopo.getWidth(), canoTopo.getHeight()
    );

//Teste de colisão
if( Intersector.overlaps( passaroCirculo, RetanguloCanoBaixo ) ||
    Intersector.overlaps(passaroCirculo, RetanguloCanoTopo) ||
    posicaoInicialVertical <= 0 || posicaoInicialVertical >= alturaDispositivo ){

        estadoJogo = 2;
        soundcolisao.play(1.0f);

} 
    
asked by anonymous 20.06.2017 / 23:41

0 answers