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

[Dúvida] Bolinha não está colidindo com a raquete do oponente

Tentei ver os tópicos no forum mas não consegui arrumar o meu problema. Usei a biblioteca e cheguei a simplificar como ele mostra no vídeo mas como o meu não tinha funcionado normal então também não funcionou simplificado. Vou deixar meu código abaixo para a resolução do problema. link do meu projeto: https://editor.p5js.org/isabelapcorreia/sketches/TCPoRruLO

let xBolinha = 300; let yBolinha = 200; let diametro = 20; let raio = diametro / 2;

let velocidadexBolinha = 6; let velocidadeyBolinha = 2;

let xRaquete = 5; let yRaquete = 150; let raqueteComprimento = 10; let raqueteAltura = 90; let colidiu = false;

//variaveis do oponente let xRaqueteOponente = 584; let yRaqueteOponente = 150; let velocidadeyOponente;

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

function draw(){ background(0); mostraBolinha(); circle(xBolinha, yBolinha, diametro) movimentaBolinha(); verificacolisaoborda(); mostrarRaquete(xRaquete, yRaquete); movimentaMinhaRaquete(); verificaColisaoRaquete(); colisaoMinhaRaquete(); mostrarRaqueteOponente(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); colisaoRaqueteOponente();

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

} function mostrarRaqueteOponente(x, y){ rect(x, y, raqueteComprimento, raqueteAltura) }

function movimentaMinhaRaquete(){ if (keyIsDown(UP_ARROW)){ yRaquete -= 10; } if (keyIsDown(DOWN_ARROW)){ yRaquete += 10; } } function verificaColisaoRaquete(){ if (xBolinha - raio< xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio> yRaquete){ velocidadexBolinha *= -1; } }

function colisaoMinhaRaquete(){ colidiu = collideRectCircle(xRaquete, yRaquete, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio); if (colidiu){ velocidadeyBolinha *= -1;

} }

function movimentaRaqueteOponente(){ velocidadeyOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30; yRaqueteOponente += velocidadeyOponente

} function colisaoRaqueteOponente(){ colidiu = collideRectCircle( xRaqueteOponente, yRaqueteOponente, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio); if (colidiu){ velocidadeyBolinha *= -1; }

2 respostas
solução!

Opa! Isso está acontecendo porquê ao invés de alterar a velocidade no eixo x quando a bola colidir com a raquete, você digitou para alterar o eixo y. Seu código está assim:

function colisaoRaqueteOponente(){
  colidiu = collideRectCircle( xRaqueteOponente, yRaqueteOponente, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
  if (colidiu){ 
    velocidadeyBolinha *= -1;
  }

quando devia ser assim:

function colisaoRaqueteOponente(){
  colidiu = collideRectCircle( xRaqueteOponente, yRaqueteOponente, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
  if (colidiu){ 
    velocidadexBolinha *= -1;
  }

Espero ter ajudado!

Muito obrigada, funcionou!