1
resposta

[Dúvida] Lógica do Código

Fiz a substituição dos códigos, conforme orientado, mas a bolinha agora ultrapassa a raquete?

Onde estou errando?

Segue o código abaixo:

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;

//velocidade da bolinha
let velocidadexBolinha = 2;
let velocidadeyBolinha = 6;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;
   
   let esquerdaBolinha = xBolinha - raio;
   let superiorBolinha = yBolinha - raio;
   let inferiorBolinha = yBolinha + raio;
    
    let direitaRaquete = xRaquete + raqueteComprimento;
    let superiorRaquete = yRaquete;
    let inferiorRaquete = yRaquete + raqueteAltura;	


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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete();
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  }

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

function movimentaBolinha(){
  xBolinha += velocidadexBolinha;
  //yBolinha += velocidadeyBolinha;
}

function verificaColisaoBorda(){
  if (xBolinha + raio > width || xBolinha - raio < 0){
    velocidadexBolinha *= -1;
  }
  if (yBolinha + raio > height || yBolinha - raio < 0){
    velocidadeyBolinha *= -1;
  }
}

function mostraRaquete(){
    rect(xRaquete, yRaquete, raqueteComprimento, raqueteAltura)
  }

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -=10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete +=10;
  }
}

function verificaColisaoRaquete(){	
    if (esquerdaBolinha < direitaRaquete     && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete) {
        velocidadexBolinha *= -1;
    }
  }
1 resposta

Oi, Vilmer! Tudo bom?

Como as variáveis esquerdaBolinha, superiorBolinha, inferiorBolinha, direitaRaquete, superiorRaquete e inferiorRaquete foram declaradas fora de qualquer função, elas serão calculadas apenas uma vez: quando o programa for iniciado.

No entanto, as posições da bolinha e da raquete mudam ao longo do tempo, então essas variáveis precisam ser atualizadas a cada "quadro". Para resolver o problema, podemos mover a definição dessas variáveis para dentro da função verificaColisaoRaquete(), que é chamada a cada instante, assim:

function verificaColisaoRaquete(){	
  let esquerdaBolinha = xBolinha - raio;
  let superiorBolinha = yBolinha - raio;
  let inferiorBolinha = yBolinha + raio;
    
  let direitaRaquete = xRaquete + raqueteComprimento;
  let superiorRaquete = yRaquete;
  let inferiorRaquete = yRaquete + raqueteAltura;	
  
  if (esquerdaBolinha < direitaRaquete && 
      superiorBolinha < inferiorRaquete && 
      inferiorBolinha > superiorRaquete) {
      velocidadexBolinha *= -1;
  }
}

Dessa forma, as variáveis serão atualizadas e, consequentemente, será possível detectar a colisão da bolinha com a raquete!

Espero ter ajudado, Vilmer! Caso surjam outras dúvidas durante os seus estudos, estarei por aqui.

Um abraço!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software