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

E quando a bolinha resolve simplesmente ir embora? xD

Entendi tudo e por enquanto funciona certinho, porém tenho esse bug na bolinha e acredito que ninguém mais aqui teve.

É super difícil fazer, tem que tentar várias vezes pra conseguir mas caso a bolinha passe muito rente à raquete ela passa direto no muro da esquerda, vai embora e nunca mais volta. Louco, né? Não consigo nem desconfiar o motivo disso.

O código é esse aqui, sei que mudei uns nomes e espero que isso não seja muito incômodo pra quem for ler. Obrigado!

//VARIÁVEIS DA BOLINHA
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;

//VELOCIDADE DA BOLINHA
let velocidadeXBolinha = 3;
let velocidadeYBolinha = 3;

//VARIÁVEIS DA RAQUETE
let xRaquete1 = 10;
let yRaquete1 = 160;
let xRaquete2 = 580;
let yRaquete2 = 160;
let alturaRaquete = 80;
let larguraRaquete = 10;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  colisaoBorda();
  mostraRaquete ();
  movimentaRaquete1();
  colisaoRaquete();
}

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

function movimentaBolinha () {
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

function colisaoBorda () {
  if (xBolinha + raio > 590 || xBolinha - raio < 0) {
    velocidadeXBolinha *= -1;
    }
  if (yBolinha + raio > 390 || yBolinha - raio < 0) {
    velocidadeYBolinha *= -1;
    }
}

function mostraRaquete() {
  rect(xRaquete1, yRaquete1,larguraRaquete ,alturaRaquete);
}

function movimentaRaquete1() {
  if (keyIsDown(UP_ARROW)) {
    yRaquete1 -= 5;
    }
  if (keyIsDown(DOWN_ARROW)) {
    yRaquete1 += 5;
    }
  if (yRaquete1 < 1) {
    yRaquete1 = 1;
  }  
  if (yRaquete1 + alturaRaquete > 399) {
    yRaquete1 = 320;
  }
}

function colisaoRaquete() {
  if (xBolinha - raio < xRaquete1 + larguraRaquete && yBolinha + raio > yRaquete1 && yBolinha - raio < yRaquete1 + alturaRaquete) {
    velocidadeXBolinha *= -1;
}}
2 respostas
solução!

Oi Pedro!! Segue no código completo as alterações. sua função colisão, está um tanto quanto diferente. Eu comentei as duas variaveis xraquete2 e yraquete2. Se vc fizer uma função de colisão usando raquete2 deve funcionar, mas quando chegar aparte de refatorar, em que o instrutor, transforma tudo em uma só, pode ficar um bocado complexo. Também alterei algo na function colisaoBorda (), os valores que vc colocou, não funcionavam bem , ficava distante a colisão com a borda. Quando vc for postar um código, use este ícone da barra de icones acima : </> e poste o código dentro, ele vai ficar indentado e mais fácil pra olhar!! Qualquer problema, poste algo!!!

function colisaoRaquete() {
if (xBolinha - raio < xRaquete1 + larguraRaquete &&
      yBolinha + raio > yRaquete1 &&
         yBolinha - raio < yRaquete1 + alturaRaquete) {
            velocidadeXBolinha *= -1; 
    }
}

ACIMA ERRADO, ABAIXO CORRETO, VEJA AS DIFERENÇAS

function colisaoRaquete() {
  if(xBolinha - raio < xRaquete1 + larguraRaquete &&
       yBolinha - raio < yRaquete1 + alturaRaquete &&
        yBolinha + raio > yRaquete1){
         velocidadeXBolinha *= -1;
  }   
}

código funcionando:

//VARIÁVEIS DA BOLINHA
let xBolinha = 300;
let yBolinha = 200; 
let diametro = 20;
let raio = diametro / 2;

//VELOCIDADE DA BOLINHA
let velocidadeXBolinha = 3;
let velocidadeYBolinha = 3;

//VARIÁVEIS DA RAQUETE 
let xRaquete1 = 5; 
let yRaquete1 = 150;
//let xRaquete2 = 585;
//let yRaquete2 = 150;
let alturaRaquete = 90;
let larguraRaquete = 10;

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

function draw() {
  background(0);
  mostraBolinha(); 
  movimentaBolinha(); 
  colisaoBorda();
  mostraRaquete ();
  movimentaRaquete1();
  colisaoRaquete(); 
}

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

function movimentaBolinha () {
  xBolinha += velocidadeXBolinha; yBolinha += velocidadeYBolinha;
}

function colisaoBorda () { 
  if (xBolinha + raio > width || xBolinha - raio < 0) {
    velocidadeXBolinha *= -1; 
  }
  if (yBolinha + raio > height|| yBolinha - raio < 0) {
    velocidadeYBolinha *= -1; 
  } 
}

function mostraRaquete() { 
  rect(xRaquete1, yRaquete1,larguraRaquete ,alturaRaquete);
}

function movimentaRaquete1() {
  if (keyIsDown(UP_ARROW)) {
    yRaquete1 -= 5;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yRaquete1 += 5;
  } 
    if (yRaquete1 < 1) {
    yRaquete1 = 1; 
  } 

  if (yRaquete1 + alturaRaquete > 399) {
    yRaquete1 = 320;
  } 


}

function colisaoRaquete() {
  if(xBolinha - raio < xRaquete1 + larguraRaquete &&
       yBolinha - raio < yRaquete1 + alturaRaquete &&
        yBolinha + raio > yRaquete1){
         velocidadeXBolinha *= -1;
  }   
}

Romeu, obrigado infinitamente por ter dedicado seu tempo com a minha dúvida! Você me ensinou coisas muito interessantes e o bug tá resolvido.