5
respostas

Melhorar jogo - Bug contador de vidas

Pessoal, fiz algumas modificações no jogo, incluindo os carros indo em direções opostas (duas vias) e o ator podendo se mover nas quatro direções, além de incluir um contador de vidas.

Porem o contador de vidas aparentemente está com um bug, quando "perde" uma vida ele conta -5, -6.... etc

Podem me ajudar ???

Segue o link do código completo:

https://editor.p5js.org/vitorhs30/sketches/JQNGpMhsz

PS: a função de perder vidas está incluída dentro da função de colisão.

5 respostas

Boa tarde. Ao testar a colisão, caso a mesma aconteça, o padrão é remover 1 ponto do jogador, porem este ponto somente deve ser removido se a quantidade atual de pontos for maior que zero. Para isso voce deve fazer uma verificação com if conforme o exemplo abaixo:

    if (colisao) {
         audioColidiu.play();
         yAtor = posicaoInicialAtor;
          if (pontuacao > 0) {
            pontuacao--;    
          }
    }

No seu caso voce esta executando o codigo abaixo:

if (colisao) {
      voltaPosicaoInicial();
      perdeVida();
      somDaColisao.play();
      if (pontosMaiorQueZero() {
          meusPontos -=1
      }
}

Voce testa a colisão, caso aconteça o jogador volta a posição inicial, perde um ponto (aqui esta o erro pois nao verifica se tem mais de zero), em seguida toca o som e depois, ao final, faz uma checagem da pontuação e remove 1 se a pontuação for maior que zero. Na sua função perdeVida() não existe teste nennhum teste, ela somente remove o ponto:

function perdeVida () {
    vidas -=1
}

Parta corrigir seu codigo basta remover esta função ou ajusta-la.

Obrigado Fernando !!!

Dei uma refinada no código com a dica, porém o erro que havia identificado permanece. Creio que seja por conta da questão da colisão entre o ator e o carro na posição x600y315. A impressão que tenho é que, durante o jogo o ator trava "por baixo" do carro nessa posição e com o jogador tendo a tecla up pressionada permanece o contato entre ator e carro e por consequência a diminuição do ponto e vidas.

Pensei na solução de implementar uma função de quando houver uma colisão enviar a ator para uma posição aleatória dentro de uma faixa determinada, porém não sei como fazer.

Vou tentar descobrir e posto aqui caso consiga.

Não corrigi 100% mas uma forma de minimizar esse erro foi implementar o seguinte código na função "voltaPosicaoInicialDoAtor":

function voltaPosicaoInicial() {yAtor = 366; xAtor = random (100,300)}

Assim evita que o ator fique batendo no carro e ocorrendo o erro.

Os pontos nunca devem ser menor que zero, caso esteja acontecendo ainda a logica de verificação continua com falha. Algo que pode acontecer é voce perder mais de um ponto ao ser atropelado, isso esta relacionado a colisão, diminuindo o diametro do ator voce resolvera esse problema.

Boa noite Vitor, tudo certo?

Conseguiu resolver o problema ?

Abraço!