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

Colisão Raquete oponente.

Bom dia! Não estou conseguindo criar a colisão na raquete do oponente.ALguém poderia me ajudar por favor.

//variáveis da bolinha 
let xBolinha = 300; 
let yBolinha = 200; 
let diametro = 15; 
let raio = diametro / 2 ;

//velocidade da bolinha 
let velocidadeXBolinha = 2; 
let velocidadeYBolinha = 2;

//variáveis da raquete 
let xRaquete = 5; 
let yRaquete = 150; 
let raqueteComprimento = 10;
 let raqueteAltura = 90;

//raquete do oponente 
let xRaqueteOponente=585; 
let yRaqueteOponente=150; 
let velocidadeYOponente;

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

}

function draw() { 
background(0); 
  
mostraBolinha(); 
movimentaBolinha(); 
verificaColisaoBorda(); 
mostraRaquete(xRaquete,yRaquete); 
movimentaMinhaRaquete(); 
verificaColisaoRaquete(xRaquete,yRaquete); 
mostraRaquete(xRaqueteOponente,yRaqueteOponente);
movimentaRaqueteOponente();
verificaColisaoRaquete(xRaqueteOponente,yRaqueteOponente);

}

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

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 mostraRaquete(x,y){ 
rect(x,y,raqueteComprimento, raqueteAltura); 

}

function movimentaMinhaRaquete(){ 
if (keyIsDown(UP_ARROW)){ 
yRaquete -= 10; } 
if (keyIsDown(DOWN_ARROW)){ 
yRaquete += 10; 
  
 }
}

function verificaColisaoRaquete(x,y){
  if (xBolinha - raio < x +raqueteComprimento && 
      yBolinha - raio < y + raqueteAltura && 
      yBolinha + raio > y){
    velocidadeXBolinha *= -1;
  }
}

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30;
  yRaqueteOponente += velocidadeYOponente
}
function  verificaColisaoRaquete(x,y){
  if (xBolinha - raio <  xRaqueteOponente + raqueteComprimento && 
      yBolinha - raio < yRaqueteOponente + raqueteAltura && 
      yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1;
}
}
3 respostas
solução!

Oi, Rodrigo! Tudo bem?

Sem o uso da biblioteca p5.collide2d.js devemos criar a colisão para cada raquete através de uma função para cada uma, visto que, cada raquete está em uma posição diferente do eixo x.

Dessa forma, inicialmente iremos excluir as duas funções nomeadas verificaColisaoRaquete(x,y) do nosso código, assim como as chamadas verificaColisaoRaquete(xRaquete,yRaquete) e verificaColisaoRaquete(xRaqueteOponente,yRaqueteOponente) dentro da function draw().

Após isso, recriaremos as funções responsáveis pelas colisões, deixando-as da seguinte maneira:

function  verificaColisaoRaquete(){
  if (xBolinha - raio <  xRaquete + raqueteComprimento && 
      yBolinha - raio < yRaqueteOponente + raqueteAltura && 
      yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1;
}
}

function  verificaColisaoRaqueteOponente(){
  if (xBolinha + raio >  xRaqueteOponente  && 
      yBolinha - raio < yRaqueteOponente + raqueteAltura && 
      yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1;
}
}

E por fim, iremos declará-las dentro da função draw(), deixando-a da seguinte forma:

function draw() { 
background(0); 
  
mostraBolinha(); 
movimentaBolinha(); 
verificaColisaoBorda(); 
mostraRaquete(xRaquete,yRaquete); 
movimentaMinhaRaquete();  
mostraRaquete(xRaqueteOponente,yRaqueteOponente);
movimentaRaqueteOponente();
verificaColisaoRaquete();
verificaColisaoRaqueteOponente();

}

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓

Boa tarde! Muito obrigado!

Estava com o mesmo problema. Muito Obrigado!!!