1
resposta

Bolinha andando somente no eixo y !!

//Variaveis da Bolinha
let xBolinha = 350;
let yBolinha = 300;
let diametro = 20;
let raio = diametro /2;

//Velocidade da Bolinha
let velocidadexBolinha = 6;
let velocidadeyBolinha = 6;

//Variaveis da Raquete
let xRaquete = 5;
let yRaquete = 160;
let RaqueteComprimento = 10;
let RaqueteAltura = 90;

//Variaveis do Oponente
let xRaqueteOp = 536;
let yRaqueteOp = 160;
let velocidadeYOp;

//Variavel Importada Biblioteca P5
let colidiu = false;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificacolisaoborda(); 
  mostraraquete(xRaquete,yRaquete);
  movimentodaraquete();
  //verificacolisaocomraquetes();
  colisaoraquetebiblioteca();
  mostraraquete(xRaqueteOp,yRaqueteOp);
  movimentaRaqueteOp();
 }

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

function mostraraquete(x,y){
   rect(x,y,RaqueteComprimento,RaqueteAltura);
}

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 movimentodaraquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }

  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}

function verificacolisaocomraquetes(){
  if (xBolinha - raio < xRaquete + RaqueteComprimento && yBolinha - raio < yRaquete + RaqueteAltura && yBolinha + raio > yRaquete){
    velocidadexBolinha *=-1;
  }
}

function colisaoraquetebiblioteca(x,y){
  colidiu =    collideRectCircle(x,y,RaqueteComprimento,RaqueteAltura,xBolinha,yBolinha,raio);
  if (colidiu){
    velocidadexBolinha *= -1;
  }
}

  function movimentaRaqueteOp(){
    velocidadeYOp = yBolinha - yRaqueteOp - RaqueteComprimento / 2 - 30;
    yRaqueteOp += velocidadeYOp;
  }
1 resposta

Olá, Matheus! Tudo certo?

Antes de tudo, agradeço a paciência em aguardar uma resposta!

A função que trata da colisão da bolinha com as raquetes possui dos parâmetros, x e y, veja:

function colisaoraquetebiblioteca(x,y){
  colidiu = collideRectCircle(x,y,RaqueteComprimento,RaqueteAltura,xBolinha,yBolinha,raio);
  if (colidiu){
    velocidadexBolinha *= -1;
  }
}

Com isso, proporcionamos uma generalização da função, a qual pode receber quaisquer valores para x e y. Em nosso caso, os valores passados corresponderão às posições das raquetes.

Quando fazemos o chamado de uma função com parâmetros obrigatórios, precisamos adicionar uma variável ou um valor entre os parênteses. A ordem dos itens passados será igual a ordem estabelecida na criação da função.

A função colisaoraquetebiblioteca(), quando chamada em seu código, não está recebendo os valores que precisa. Por esse motivo, a bolinha está se movendo de maneira diferente.

Para resolver o problema, podemos chamar a função colisaoraquetebiblioteca() para cada uma das raquetes, adicionando os parâmetros de suas posições, da seguinte forma:

// colisão com a nossa raquete!
colisaoraquetebiblioteca(xRaquete, yRaquete);
// colisão com a raquete do oponente!
colisaoraquetebiblioteca(xRaqueteOp, yRaqueteOp); 

O chamado desta função ocorre dentro de draw(). Sendo assim, ao adicionarmos os comandos vistos acima, chegaremos neste resultado:

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificacolisaoborda(); 
  mostraraquete(xRaquete,yRaquete);
  movimentodaraquete();
  //verificacolisaocomraquetes();
  colisaoraquetebiblioteca(xRaquete, yRaquete); // colisão com a nossa raquete!
  mostraraquete(xRaqueteOp,yRaqueteOp);
  movimentaRaqueteOp();
  colisaoraquetebiblioteca(xRaqueteOp, yRaqueteOp); // colisão com a raquete do oponente!
}

Para enriquecer ainda mais os seus conhecimentos de programação, trago uma dica super interessante de leitura:

O artigo acima, da Alura, comenta sobre algo muito importante no desenvolvimento de códigos, que é a padronização de nomenclaturas para a construção de programas.

Espero que goste da indicação! Aliás, caso surjam dúvidas ao longo da sua jornada de estudos, lembre-se que você pode contar com o fórum. Fico à disposição para te auxiliar!

Até mais, Matheus!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado! ✓.