Olá pessoal, dei uma lida nos tópicos e parece que não sou o único com dúvidas na colisão da bolinha com a raquete. Infelizmente nenhuma das soluções mostradas sanou a minha dúvida, então segue meu emaranhado.
(De antemão peço desculpas pela alteração de algumas palavras para declarar as variáveis, mas a lógica é a mesma.)
O código inteiro é o seguinte:
let xBolinha = 300
let yBolinha = 200
let velocidadeX = 2
let velocidadeY = 2
let diametro = 15
let raio = diametro / 2
// R = raquete
let xR = 5
let yR = 150
let larguraR = 5
let alturaR = 90
function draw() {
background(0);
desenhaBolinha();
velocidadeBolinha();
colisaoBorda();
desenhaRaquete();
movimentaR();
verificaColisaoR();
}
function setup() {
createCanvas(600, 400);
}
function desenhaBolinha(){
circle(xBolinha, yBolinha, diametro);
}
function velocidadeBolinha(){
xBolinha += velocidadeX
yBolinha += velocidadeY
}
function colisaoBorda(){
if (xBolinha + raio > width || xBolinha - raio < 0){
velocidadeX *= -1
}
if (yBolinha + raio > height || yBolinha - raio < 0){
velocidadeY *= -1
}
}
function desenhaRaquete(){
rect(xR, yR, larguraR, alturaR);
}
function movimentaR() {
if(keyIsDown(UP_ARROW)){
yR += -10;
}
if(keyIsDown(DOWN_ARROW)){
yR += 10;
}
}
function verificaColisaoR(){
if(xBolinha - raio < xR ){
velocidadeX *= -1
}
}
Minha dúvida está no porque colocar a altura da raquete no If da colisão? Se eu coloco no meu código a bolinha retorna muito antes de sequer tocar na raquete e se eu retiro o código funciona.
O código correto do professor fica:
function verificaColisaoRaquete() {
if (xBolinha - raio < xRaquete + raqueteComprimento
&& yBolinha - raio < yRaquete + raqueteAltura
&& yBolinha + raio > yRaquete) {
velocidadeXBolinha *= -1;
}
}
Dúvida seguinte que é a de porque mexermos no eixo Y da bolinha e o Raio? Não consegui entender a lógica de como funciona pra caso a bolinha não toque a raquete.