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

p5.js bolinha ainda não reconhece colisão com a minha raquete

Boa noite,

Por favor, alguém sabe dizer porque a bolinha ainda não reconhece a colisão com a raquete?? Vou deixar meu código aqui.

//variáveis da bolinha let xBolinha = 300; let yBolinha = 170; let diametro = 15;

//velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6; let raio = diametro / 2;

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

let esquerdaBolinha = xBolinha - raio; let superiorBolinha = yBolinha - raio; let inferiorBolinha = yBolinha + raio;

let direitaRaquete = xRaquete + raqueteComprimento; let superiorRaquete = yRaquete; let inferiorRaquete = yRaquete + raqueteAltura;

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

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(); movimentaMinhaRaquete(); verificaColisaoRaquete();

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(){ rect(xRaquete, yRaquete, raqueteComprimento, raqueteAltura );

}

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

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

function verificaColisaoRaquete(){ if (esquerdaBolinha < direitaRaquete && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete){ velocidadeXBolinha *= -1; } }

2 respostas
solução!

Oi Luis, tudo bem?

Ao analisar o seu código, percebi que você está definindo as variáveis esquerdaBolinha, superiorBolinha, inferiorBolinha, direitaRaquete, superiorRaquete e inferiorRaquete fora do loop draw(). Isso significa que essas variáveis são calculadas apenas uma vez, no início do programa, e não são atualizadas conforme a bolinha e a raquete se movem.

Para resolver este problema, você deve mover essas linhas de código para dentro da função verificaColisaoRaquete(). Dessa forma, as posições da bolinha e da raquete serão atualizadas a cada quadro, permitindo a detecção correta de colisão.

Aqui está como a função verificaColisaoRaquete() deve ficar:

function verificaColisaoRaquete(){	
    let esquerdaBolinha = xBolinha - raio;
    let superiorBolinha = yBolinha - raio;
    let inferiorBolinha = yBolinha + raio;
    
    let direitaRaquete = xRaquete + raqueteComprimento;
    let superiorRaquete = yRaquete;
    let inferiorRaquete = yRaquete + raqueteAltura;	

    if (esquerdaBolinha < direitaRaquete && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete){
        velocidadeXBolinha *= -1;  
    }
}

Espero ter ajudado.

Um abraço e bons estudos.

Muito obrigado Lorena. Ajudou sim. Mas não entendi porque a função verificaColisaoBolinha esttava fora do loop draw(). Pois estava escrito na linha, mas acredito que não estava "ativada" de alguma maneira. Por isso fiquei em dúvida.. mas enfim.

Obrigado