Gdx Audio Infinite Sound Error

Asked

Viewed 104 times

0

I’m creating a didactic game and when the bird collides with some object the sound happens but is endlessly repeating it, I can’t 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(); number Random= new Random(); walkCircle = new Circle(); /voltar Rectanglocanotopo = new Rectangle(); Rectangular square = new Rectangle(); Shape = new Shaperenderer();*/ source = new Bitmapfont(); setColor source(Color.WHITE); 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);

} 
  • It would be interesting to show the complete code. Only through this passage can not say anything.

  • Okay, I’ll add

  • Still bad to understand. The code still seems incomplete as if this If that plays the sound is lost in the middle of the code.

  • that last one is the collision test this in the right place as the teacher passed, after the objects collide only had to give a beat sound of 1s and it stays in a looping, I’m waiting answer from the teacher also on this because it was he who said to do so

  • What I’m saying is that the way it’s pasted in the post, the code seems incomplete. I can’t understand it. It may have missed something in the post code.

  • Maybe you can use something like 'soundcolisao.stop' after a delay of a few seconds.

  • I debugged and appeared like this: ((Androidsound)soundcolisao). streamIds = cannot find local variable , if anyone understood the error Please helps

Show 2 more comments
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.