Olá Gabriel tudo bem com você??
Então fiz um CodeReview e encontrei alguns pontos do por que não estava funcionando sua colisão nas raquetes.
O primeiro ponto a ser comentado é atentar para os ";" nos finais dos comandos, isso realmente impede que o código seja executado e acaba passando batido enquanto estamos aprendendo =)
Segundo ponto, seria a questão com relação aos nome das variáveis e funções, pois quando erramos nisso, acabamos "quebrando nosso código" e também é bem fácil de passar batido por que geralmente é uma questão de letra maíuscula ou minúscula, a adição de uma letra "s" e por aí vai ^^
Terceiro e último ponto, mas não menos importante, faltou no seu código a função que determina a colisão e ela ser chamada para que o programe funcionasse direitinho. A função que estou falando é a collideRectCircle. Sem ela realmente não seria possível a bolinha tocar nas raquetes, pois ela indica os parâmetros necessários dessa ação.
Segue o código revisado como ficou:
//Variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;
// Velocidade da bolinha
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;
// Variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;
// Variaveis da raquete oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;
let colidiu = false;
//Função CollideRectCircle
function collideRectCircle (rx, ry, rw, rh, cx, cy, diameter){
var testX = cx;
var testY = cy;
if (cx < rx){testX = rx
}else if (cx > rx+rw){testX = rx+rw}
if (cy < ry) {testY = ry}else if (cy > ry+rh){testY = ry+rh}
var distance = this.dist(cx, cy, testX, testY)
if (distance <= diameter/2){
return true;
}
return false;
};
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) {
colidiu = collideRectCircle (x, y,raqueteComprimento,raqueteAltura,
xBolinha,yBolinha,raio);
if (colidiu){
velocidadeXBolinha *= -1;
}
}
function movimentaRaqueteOponente() {
velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30;
yRaqueteOponente += velocidadeYOponente;
}
Se a minha resposta te ajudou, fico muito feliz =D e peço que por favor encerre o Post marcando a dúvida como resolvida!
Caso precise de ajuda é só voltar aqui e perguntar.
Obrigado
Victor Gonzalez