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

[Dúvida] Colisão na direção errada.

Olá! Consegui criar a colisão da bolinha com a raquete, mas ela sempre é rebatida de volta na mesma direção em que encostou na raquete! Se ela "veio" por baixo, ela bate na raquete e volta por baixo! Deveria ser ao contrário, mas não consegui entender o por que desse comportamento. Ps: Poderia ser o "VelocidadeY *=-1"?

Meu código:

// Variáveis da Bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 15; let raio = diametro / 2 let velocidadeX = 6; let velocidadeY = 6;

//Variáveis da Raquete 1 "jogador" let xRaquete = 5; let yRaquete = 150; let comprimento = 10; let altura = 90; let colidiu = false;

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

function draw(){ background(0); mostraBolinha(); velocidadeBolinha(); colisaoBolinha(); mostraRaquete(xRaquete, yRaquete); movimentoRaquete(); colisaoRaqueteBiblioteca(); }

// Funções da Bolinha function mostraBolinha(){ circle(xBolinha, yBolinha, diametro) }

function velocidadeBolinha(){ xBolinha += velocidadeX yBolinha += velocidadeY }

function colisaoBolinha(){ if (xBolinha + raio > width || xBolinha - raio < 0){ velocidadeX *= -1; } if (yBolinha + raio > height || yBolinha - raio < 0){ velocidadeY *= -1; } }

// Funções da raquete I function mostraRaquete(x, y){ rect(x, y, comprimento, altura); }

function movimentoRaquete(){ if(keyIsDown(UP_ARROW)){ yRaquete -= 10; } if(keyIsDown(DOWN_ARROW)){ yRaquete += 10; } }

function colisaoRaqueteBiblioteca() { colidiu = collideRectCircle(xRaquete, yRaquete, comprimento, altura, xBolinha, yBolinha, raio); if (colidiu){ velocidadeY *= -1 } }

2 respostas
solução!

Você esta multiplicando a velocidade Y da bolinha por -1 sendo que para funcionar normalmente você deve multiplicar a velocidadeX, basta fazer como abaixo:

function colisaoRaqueteBiblioteca() { colidiu = collideRectCircle(xRaquete, yRaquete, comprimento, altura, xBolinha, yBolinha, raio); if (colidiu){ velocidadeX *= -1 } }

Muito obrigado! Eu não tinha percebido que estava multiplicando a Y ao invés da X , deu tudo certo agora.