Olá, tudo certo?
Estava fazendo a aula em questão, porém acabei não optando por utilizar a importação do repositório e biblioteca collideRectCircle. No caso fiz vários testes no código, e notei que o mesmo código de colisão na minha raquete não se aplica para a colisão da raquete do oponente, ocorrendo algum bug travando a bolinha no centro e movendo apenas o eixo y. Fiz vários testes de tamanho e valores para tentar simular a colisão da raquete do oponente, porém nenhuma funcionou devidamente. Minha dúvida é se teria alguma forma de fazer a colisão da raquete do oponente sem usar a biblioteca? Segue abaixo o código.
//Criação das Variáveis Bola
let xBola = 300;
let yBola = 200;
let velxBola = 3;
let velyBola = 3;
let diametro = 30;
let raio = diametro / 2;
//Criação das Variáveis Raquete
let xRaquete = 5;
let yRaquete = 160;
let compRaquete = 10;
let largRaquete = 90;
let xRaqueteOp = 585;
let yRaqueteOp = 160;
let velyRaqueteOp;
function setup() {
createCanvas(600, 400);
}
function draw() {
background(0);
bola();
movimentarBola();
colisaoBola();
pau();
movimentarPau();
colisaoPaus();
pauNPC();
movimentarPauNPC();
}
function bola() {
circle(xBola, yBola, diametro);
}
function movimentarBola() {
xBola += velxBola;
yBola += velyBola;
}
function colisaoBola() {
if (xBola + raio > width || xBola - raio < 0)
velxBola *= -1;
if (yBola + raio > height || yBola - raio < 0)
velyBola *= -1;
}
function pau() {
rect(xRaquete, yRaquete, compRaquete, largRaquete);
}
function pauNPC() {
rect(xRaqueteOp, yRaqueteOp, compRaquete, largRaquete);
}
function movimentarPau() {
if (keyIsDown(UP_ARROW)) {
yRaquete -= 5;
}
if (keyIsDown(DOWN_ARROW)) {
yRaquete += 5;
}
}
function colisaoPaus() {
if (xBola - raio < xRaquete + compRaquete && yBola - raio < yRaquete + largRaquete && yBola + raio > yRaquete)
velxBola *= -1
if (xBola - raio < xRaqueteOp + compRaquete && yBola - raio < yRaqueteOp + largRaquete && yBola + raio > yRaqueteOp)
velxBola *= -1
}
function movimentarPauNPC() {
velyRaqueteOp = yBola - yRaqueteOp - 50;
yRaqueteOp += velyRaqueteOp;
}
Se remover a parte do código if (xBola - raio < xRaqueteOp + compRaquete && yBola - raio < yRaqueteOp + largRaquete && yBola + raio > yRaqueteOp)
velxBola *= -1
presente na função de colisaoPaus, a bolinha funciona corretamente, porém sem colisão com a raquete do oponente.