Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Feito

Segue: https://editor.p5js.org/maro3510/full/ZCoUi_Kun

Tentei fazer atalhos para os calculos de pontos de colisão como let xRaqueteMaisLarguraRaquete = xRaquete + larguraRaquete;, mas sempre que execultava a bolinha passava por dentro da raquete, ignorando meu código de colisão.

Alguém sabe o por quê?

//PROPRIEDADES DA RAQUETE
let xRaquete = 5;
let alturaRaquete = 70;
let yRaquete = 200 - alturaRaquete/2;
let larguraRaquete = 10;
let arestasRaquete = 45;
let movimentoRaquete = 10;
//let xRaqueteMaisLarguraRaquete = xRaquete + larguraRaquete; 
//let yRaqueteMaisAlturaRaquete = yRaquete + alturaRaquete;

//PROPRIEDADES DA RAQUETE INIMIGA
//let alturaRaqueteInimiga = alturaRaquete;
//let larguraRaqueteInimiga = larguraRaquete;
//let xRaqueteInimiga = 600 - 5 - larguraRaqueteInimiga;
//let yRaqueteInimiga = 200 - alturaRaqueteInimiga/2;
//let raioRaqueteInimiga = alturaRaquete;

//PROPRIEDADES DA BOLINHA
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 15;
let raioBolinha = diametroBolinha / 2;
//let xBolinhaMenosRaioBolinha = xBolinha - raioBolinha;
//let yBolinhaMenosRaioBolinha = yBolinha - raioBolinha;
//let yBolinhaMaisRaioBolinha = yBolinha + raioBolinha;

//AÇOES DA BOLINHA
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

let colisao = false;

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

function draw() {
  background(50);
}

function draw(){
  background(0);
  propriedadesDaBolinha()
  moverBolinha()
  colisaoDaBolinha()
  propriedadesDaRaquete()
//  propriedadesDaRaqueteInimiga()
  //verificaColisaoRaquete()
  colisaoBolinhaBiblioteca()
}

function propriedadesDaBolinha(){  
  circle(xBolinha, yBolinha, diametroBolinha);
}

function moverBolinha(){
  xBolinha += velocidadeXBolinha
  yBolinha += velocidadeYBolinha
}

function colisaoDaBolinha(){
  if (xBolinha + raioBolinha > width||
     xBolinha - raioBolinha < 0){
    velocidadeXBolinha *= -1
  }

  if (yBolinha + raioBolinha > height || 
     yBolinha - raioBolinha < 0){
    velocidadeYBolinha *= -1
  }
}

function propriedadesDaRaquete(){
  rect(xRaquete, yRaquete, larguraRaquete, alturaRaquete, arestasRaquete)
  if (keyIsDown(UP_ARROW)){
    yRaquete -= movimentoRaquete;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += movimentoRaquete
  }
}

function propriedadesDaRaqueteInimiga(){
  rect(xRaqueteInimiga, yRaqueteInimiga, larguraRaqueteInimiga, alturaRaqueteInimiga, raioRaqueteInimiga);
}

function verificaColisaoRaquete(){
  if (xBolinha - raioBolinha < xRaquete + larguraRaquete
    && yBolinha - raioBolinha < yRaquete + alturaRaquete
    && yBolinha + raioBolinha > yRaquete) {
    velocidadeXBolinha *= -1;
  }
}

function colisaoBolinhaBiblioteca(){
  colisao = 
    collideRectCircle(xRaquete, yRaquete, larguraRaquete, alturaRaquete, xBolinha, yBolinha, raioBolinha);
  if (colisao){
    velocidadeXBolinha *= -1;
  }
}
3 respostas
solução!

troca a function verificaColisaoRaquete por essa function verificaColisaoRaquete(){ if (xBolinha - raio < xRaquete + wRaquete && yBolinha - raio < yRaquete + hRaquete && yBolinha + raio > yRaquete ){ velocidadeXBolinha *= -1; } } que vai funcionar

valeuu ainda nao consigo te explicar exatamento o pq, mas compara as duas e encontra o problema

Tem muita relação com o nome dos SET's e das FUNCTION's, obrigado!

A didática desse professor é sensacional.

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