1
resposta

&& Não está funcionando

"&& Não está funcionando" Já verifiquei se tinha algum erro no código ou espaçamento desnecessário. Fiz algumas alterações nos nomes das Var's, mas nada significativo. Segue o código:

//Var's Bolinha let xBolinha = 400; let yBolinha = 200; let diametro = 20; let raio = diametro / 2;

//Var's velocidade let velocidadeX = 5; let velocidadeY = 5;

//Var's raquete let xRaquete = 10; let yRaquete = 175; let raqueteH = 10; let raqueteW = 50;

function setup() { createCanvas(800, 400); }

function draw() { background(0); mostraBolinha(); movimentoBolinha(); colisaoBolinha(); mostraRaquete(); movimentoRaquete(); colisaoRaquete(); }

function mostraBolinha(){ circle(xBolinha, yBolinha, diametro); }

function movimentoBolinha(){ xBolinha += velocidadeX; yBolinha += velocidadeY; }

function colisaoBolinha(){ if (xBolinha + raio> width || xBolinha - raio < 0){ velocidadeX *= -1; }

if (yBolinha + raio > height || yBolinha - raio < 0){ velocidadeY *= -1; } }

function mostraRaquete(){ rect(xRaquete, yRaquete, raqueteH, raqueteW); }

function movimentoRaquete(){ if(keyIsDown(UP_ARROW)){ yRaquete -= 10; }

if(keyIsDown(DOWN_ARROW)){ yRaquete += 10; } }

function colisaoRaquete(){ if (xBolinha - raio < xRaquete + raqueteH && yBolinha - raio < yRaquete + raqueteW){ velocidadeX *= -1; } }

1 resposta

Olá, Guilherme!

No seu código, você está verificando se a bolinha está colidindo com a raquete apenas considerando a posição X da bolinha e da raquete. No entanto, a colisão deve ser verificada considerando tanto a posição X quanto a posição Y. Isso porque a bolinha pode estar na mesma posição X da raquete, mas em uma posição Y diferente, o que significa que não há colisão.

Aqui está o que você precisa fazer para corrigir isso:

function colisaoRaquete(){
  if (xBolinha - raio < xRaquete + raqueteH && 
      yBolinha - raio < yRaquete + raqueteW && 
      yBolinha + raio > yRaquete){
    velocidadeX *= -1;
  }
}

Neste código, estamos verificando se a bolinha está na mesma posição X da raquete (xBolinha - raio < xRaquete + raqueteH), se a bolinha está abaixo do topo da raquete (yBolinha - raio < yRaquete + raqueteW) e se a bolinha está acima da base da raquete (yBolinha + raio > yRaquete). Se todas essas condições forem verdadeiras, então há uma colisão e a velocidade X da bolinha deve ser invertida (velocidadeX *= -1).

Espero que isso resolva o problema! No entanto, se o erro persistir ou se eu o interpretei de forma equivocada, peço que forneça mais informações sobre o código. Se conseguir, compartilhe o link do seu projeto que ajuda bastante, ele pode ser encontrado no topo da sua página quando o p5 estiver aberto.

Espero ter ajudado e reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!