Fiquei tentando resolver o bug que acontece quando a bolinha bate na parte de cima ou na parte de baixo da raquete, só pra tentar praticar um pouco e exercitar, porem não consegui. alguém conseguiu?
Fiquei tentando resolver o bug que acontece quando a bolinha bate na parte de cima ou na parte de baixo da raquete, só pra tentar praticar um pouco e exercitar, porem não consegui. alguém conseguiu?
Fala, João! Tudo bem contigo?
Desculpe a demora em dar um retorno!
Poste o link do seu projeto para que possamos dar um olhada!
Fico no aguardo!!!
Se for o mesmo que eu tive, a bolinha entra atras da raquete e as vezes marca centenas de pontos. https://editor.p5js.org/f3l1p3cl/sketches/0kT2JI798 não consegui resolver também
Olá, uma coisa que tentei no meu projeto e me pareceu ter funcionado foi mudar isso (este primeiro código se refere ao projeto do colega Felipe, pois acredito que o seu esteja parecido se o mesmo problema está ocorrendo):
function movimentaBolinha(){
xBolinha+=velocidadeXBolinha;
yBolinha+=velocidadeYBolinha;
}
function verificaColisaoMinhaRaquete(){
if(xBolinha-raioBolinha<xMinhaRaquete+larguraRaquete &&
yBolinha+raioBolinha<yMinhaRaquete+alturaRaquete &&
yBolinha-raioBolinha>yMinhaRaquete){
velocidadeXBolinha*=-1;
}
}
para isso:
let xDirecaoBolinha = 1;
let yDirecaoBolinha = 1;
function movimentoBolinha() {
xBolinha += (velocidadeXBolinha * xDirecaoBolinha );
yBolinha += (velocidadeYBolinha * yDirecaoBolinha );
}
function verificaColisaoRaquete() {
if(xBolinha-raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha +raio > yRaquete ){
xDirecaoBolinha = 1;
}
Como pode ver, eu adicionei as variáveis "direcaoBolinha" para o "x" e para o "y", e para que a Bolinha mudasse de direção eu passei a multiplicar apenas esse número por -1(nos outros casos de colisão). No caso de haver uma colisão com a raquete o número será alterado para 1, então mesmo que a bolinha bata na raquete novamente ela continuará seguindo para a direita( se for a "minha" raquete). Vou deixar o que fiz do projeto até o momento abaixo caso queira conferir. Espero ter ajudado e entendido o problema corretamente.
// varivaies Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 16;
let raio = diametro/2;
let velocidadeXBolinha = 2;
let velocidadeYBolinha = 2;
let xDirecaoBolinha = 1;
let yDirecaoBolinha = 1;
// variaveis raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;
function setup() {
createCanvas(600, 400);
}
function draw() {
background(0);
desenhaCirculo();
movimentoBolinha();
colisaoBolinhaBordas();
desenhaRaquete ();
movimentoMinhaRaquete();
verificaColisaoRaquete()
}
function desenhaCirculo(){
circle(xBolinha,yBolinha,diametro);
}
function colisaoBolinhaBordas() {
if(xBolinha > (width-raio) || xBolinha < raio) {
xDirecaoBolinha *= -1;
}
if(yBolinha > (height-raio) || yBolinha < raio){
yDirecaoBolinha *= -1;
}
}
function movimentoBolinha() {
xBolinha += (velocidadeXBolinha * xDirecaoBolinha );
yBolinha += (velocidadeYBolinha * yDirecaoBolinha );
}
function desenhaRaquete (){
rect(xRaquete,yRaquete,raqueteComprimento,raqueteAltura);
}
function movimentoMinhaRaquete() {
if (keyIsDown(UP_ARROW) && yRaquete>0){
yRaquete -=10;
}
if (keyIsDown(DOWN_ARROW) && (yRaquete + raqueteAltura)<height){
yRaquete +=10;
}
}
function verificaColisaoRaquete() {
if(xBolinha-raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha +raio > yRaquete ){
xDirecaoBolinha = 1;
}
}