Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Porque usamos if (colidiu) ao invés de if (colidiu = true)?

Tendo a tentar executar os passos antes do professor, e pela lógica, usei "if (colidiu = true)". Isso causou um bug onde a bolinha deixava de colidir com a parede direita do canvas.

Ps: meu código tem algumas diferenças, uso a função "abs()" para escolher o sentido da velocidade ao invés de simplesmente inverter, de resto acho que está relativamente igual.

//canvas
let xCanvas = 600
let yCanvas = 400

//bolinha
let xBolinha = 300; //posição x
let yBolinha = 200; //posição y
let dBolinha = 10; //diâmetro
let rBolinha = dBolinha/2; //raio

//velocidade da bolinha
let vXBolinha = 6; //velocidade x
let vYBolinha = 6; //velocidade y

//raquete
let xRaquete = 20; //posição x
let yRaquete = 190; //posição y
let wRaquete = 10; //largura
let hRaquete = 50; //altura
let vRaquete = 6; //velocidade

let colisao = false;

function setup() {
  createCanvas(xCanvas, yCanvas);
}

function draw() {
  background(0);
  stroke(255)
  line (xCanvas/2, 0, xCanvas/2, yCanvas);
  mostraBolinha();
  movBolinha();
  colBolinhaBorda();
  mostraRaquete();
  controleRaquete();
  //colBolinhaRaquete();
  colRectCircle();
}

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

function movBolinha(){
  xBolinha += vXBolinha;
  yBolinha += vYBolinha;
}

function colBolinhaBorda(){
  if (xBolinha > width-rBolinha) {
      vXBolinha = abs(vXBolinha) *-1
      }
  if (xBolinha < rBolinha) {
      vXBolinha = abs(vXBolinha)
      }
  if (yBolinha > height-rBolinha) {
      vYBolinha = abs(vXBolinha) * -1
      }
  if (yBolinha < rBolinha) {
      vYBolinha = abs(vXBolinha)
      }
}

function mostraRaquete(){
  rect(xRaquete, yRaquete, wRaquete, hRaquete)
}

function controleRaquete(){

  if (keyIsDown(UP_ARROW) || keyIsDown(87) ) { // W
    if (yRaquete < 0) {}
      else {
      yRaquete -= vRaquete;
      }
  }
  if (keyIsDown(DOWN_ARROW) || keyIsDown(83) ) { // S
    if (yRaquete > yCanvas-hRaquete) {}
      else {
      yRaquete += vRaquete;
      }
  }
}

function colBolinhaRaquete(){
  if (xBolinha <= xRaquete+wRaquete+rBolinha && yBolinha >= yRaquete+rBolinha && yBolinha <= yRaquete+rBolinha+hRaquete) {
  vXBolinha = abs(vXBolinha)
  }
}

function colRectCircle(){
  colisao = collideRectCircle(xRaquete, yRaquete, wRaquete, hRaquete, xBolinha, yBolinha, rBolinha);
  if (colisao){
    vXBolinha = abs(vXBolinha)
  }
}
1 resposta
solução!

Olá Danyel, tudo bem? Espero que sim!

Quando você fizer uma comparação, deve utilizar dois sinais de igual, ( == ).

Dessa forma o seu if ficaria:

 if (colidiu == true)

Quando colocamos apenas if (colidiu), o código já está checando se colidiu é verdadeiro, então não há necessidade de escrever o true.

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!