1
resposta

[Dúvida] A BOLINHA NÃO RECONHECE COLISÃO COM A MINHA RAQUETE

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 170;
let diametro = 15;

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let raio = diametro / 2;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

//variáveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); 
}
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(x,y) {
  rect(x, y, raqueteComprimento, raqueteAltura);
}



function movimentaMinhaRaquete() {
  if (keyIsDown(UP_ARROW) && yRaquete > 0) {
    yRaquete -= 10;
  }
 
  if (keyIsDown(DOWN_ARROW) && yRaquete + raqueteAltura < height) {
    yRaquete += 10;
  }
}

function verificaColisaoRaquete(x,y){	
    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;  
    }
}

function movimentaRaqueteOponente(){
velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento /2 - 30;
  yRaqueteOponente += velocidadeYOponente
}
1 resposta

Oi, Luis! Tudo bem?

De acordo com a lógica que você está buscando aplicar no código, para que ele funcione corretamente precisamos fazer apenas algumas alterações na função verificaColisaoRaquete(x,y), deixando-a da seguinte maneira:

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

    if(x == xRaqueteOponente && y == yRaqueteOponente){
      if (direitaBolinha > esquerdaRaquete && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete){
        velocidadeXBolinha *= -1;  
      }
    }

}

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓