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

Colisão da bola com a raquete não funciona corretamente

Além da bola voltar pelo mesmo caminho que fez, ela aparentemente não colide com a raquete, não sei se o problema é o meu código, então vou deixar ele aqui em baixo. ("index.html" e "p5.collide2d.js" estão arrumadas, sem nenhuma alteração que não foi mostrada na aula.)

// variaveis da bola
let xBola = 300;
let yBola = 200;
let diametro = 19;
let raio = diametro / 2;

// variaveis da vel. bola
let velocidadeXBola = 5;
let velocidadeYBola = 5;

//variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let larguraRaquete = 9;
let alturaRaquete = 135;

let colidiu = false;

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

function draw() {
  background(0);
  mostraBola();
  movimentoBola();
  colisãoBola();
  mostraRaquete();
  movimentoDaRaquete();
  //colisãoDaRaquete();
  colisãoMinhaRaqueteBiblioteca();
}

function mostraBola() {
  circle(xBola - 6, yBola, diametro);
}

function movimentoBola() {
  xBola += velocidadeXBola;
  yBola += velocidadeYBola;
}

function colisãoBola() {
  if (xBola + raio > width || xBola - raio < 0) {
    velocidadeXBola *= -1;
  }
  if (yBola + raio > height || yBola - raio < 0) {
    velocidadeYBola *= -1;
  }
}

function mostraRaquete() {
  rect(xRaquete, yRaquete, larguraRaquete, alturaRaquete);
}

function movimentoDaRaquete() {
  if (keyIsDown(UP_ARROW)) {
    yRaquete -= 5;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yRaquete += 5;
  }
}

function colisãoDaRaquete() {
  if (
    xBola - raio < xRaquete + larguraRaquete &&
    yBola - raio < yRaquete + alturaRaquete &&
    yBola - raio > yRaquete
  ) {
    velocidadeXBola *= -1;
  }
}

function colisãoMinhaRaqueteBiblioteca() {
  colidiu = collideRectCircle(
    xRaquete,
    yRaquete,
    larguraRaquete,
    alturaRaquete,
    xBola,
    yBola,
    raio
  );
  if (colidiu) {
    velocidadeYBola *= -1;
  }
}
5 respostas

Olá Yan, Bom dia!! vi aqui que na verificação de colisão

if(colidiu){
    velocidadeYBola *=  -1;
}

Ele apenas irá inverter o eixo "Y" (Cima e Baixo), tendo a necessidade de incrementar a inversão do eixo "X" para a colisão ocorrer

Ex:

if(colidiu){
    / inverte para CIMA ou para BAIXO
    velocidadeYBola *= -1;

    /inverte para o lado DIREITO ou ESQUERDO, causando a colisão
    velocidadeXBola *= -1;
}

Responda aqui se deu certo ^^

Oi Yan!! A colisão não funciona, pq vc está com um erro no código de colisão.

Na função abaixo, o X e Y subtraem o raio DA BOLINHA, mas na terceira linha, o Y soma com o raio da bolinha. Eu deveria conferir isso , abrindo o meu editor, mas rsss já vi tanto isso. Se resolver, blz, qq coisa, diga!!! Bons estudos!!

function colisãoDaRaquete() {
  if (
    xBola - raio < xRaquete + larguraRaquete &&
    yBola - raio < yRaquete + alturaRaquete &&
    yBola - raio > yRaquete  
  ) {
    velocidadeXBola *= -1;

Fiz as duas soluções mas mesmo assim não funciona corretamente, caso alguém tenha tempo, estarei disponibilizando o link do meu projeto aqui: https://editor.p5js.org/Dreemurr_Diazz/sketches/u_9X7cJT_

solução!

Acabei descobrindo que eu estava multiplicando a variável "yBola" por -1, por isso estava voltando. Apenas retirei esta parte do código e agora funciona normalmente.

Que bom !!

Bons estudos!!