3
respostas

[Sugestão] Evitar bolinha de ficar presa gerando pontuação fora do padrão

Estou aberto a criticas e a sugestões de melhorias. Creio que o ideal seria eliminar o bug de forma definitiva, mas como não consegui realizar tal feito, nem implementando formas já pesquisadas ( por erro próprio mesmo muito provavelmente kk Decidi implementar uma forma de "burlar" esse bug e resolver de uma maneira um tanto mais "real" por assim dizer. Após a cada ponto , o marcador daquele ponto recebe uma espécie de saque como funciona na vida real com a bolinha vindo do centro do plano com a velocidade da bolinha reduzida em relação a velocidade original e assim que é efetuado o primeiro contato com a raquete, a velocidade original volta ao plano. Fiz 2 alterações nas funções de marcaPonto e Colisao.

OBS:(a ideia da redução de velocidade é que de um tempo de reação bom para efetuar a primeira raquetada ao jogador que pontuou.

function colisaoRaquete(x,y){
  colisao = collideRectCircle(x, y, raquetecomprimento, raquetealtura, xBall, yBall, diameter);
  if (colisao){
    xSpeedball *= -1;
    raquetadaSound.play();
  }
  if (colisao && ySpeedball == 1){
    ySpeedball = 8;
  }
}
function marcaPonto() {
    if (xBall + raio > 595) {
        meusPontos += 1;
        ponto.play();
        xBall = 300;
        yBall = 200;
        ySpeedball = 1;        
    }
    if (xBall - raio < 5) {
        pontosOponente += 1;
        ponto.play();
        xBall = 300;
        yBall = 200;
        ySpeedball = 1;
    }
}
3 respostas

Olá, Bruno! Tudo bom?

Parabéns pela implementação, você está no caminho correto e sua lógica funciona bem. Apenas sugiro que você crie uma função separada para dividir a responsabilidade no seu código, pois isso você já possui base para realizar.

E o caminho é esse, praticar, errar, errar até acertar!

Parabéns novamente e bons estudos!

Oii tudo bom Camila, e você como esta ?

Irei seguir sua sugestão e logo posto a resolução. Muito obrigado ! :)

Efetuei uma nova função para a bolinha presa mantendo a função colisao ( ).Infelizmente não consegui achar uma forma de resolver

if (colisao && ySpeedball == 1){
    ySpeedball = 8;
  } 

ao tirar essas linhas e colocar numa nova função, a mesma nao detectava a colisao com minha raquete, ou seja a bolinha não voltava a 8 de velocidade. Só acontecia quando colidia com a raquete oponente. Decidi manter essas linhas na função de colisaoRaquete( ... ) e criei a função reposicionarBolinha( ) para reposicionar a bolinha após o ponto e assim efetuando oq eu planejei no inicio.

function reposicionarBolinha(){

    if(marcaPonto()){
       xBall = 300;
       yBall = 200;
       ySpeedball = 1;
    } 
}

function marcaPonto() {
    if (xBall + raio > 595) {
        meusPontos += 1;
        ponto.play();
        return true;
    }
    if (xBall - raio < 5) {
        pontosOponente += 1;
        ponto.play();
        return true;
    }
}

Dessa forma foi necessario desativar a função marcaPonto() no draw ( ) pois o mesmo efetuava pontos em duplicidade e coloquei a função reposicionarBolinha( ) para executar.