1
resposta

[Dúvida] Bug da raquete com a bolinha

Eai pessoal, gostaria de compartilhar um bug com vcs, e saber se tem solução. Quando tinha finalizado a colisão da bolinha com a minha raquete percebi que quando subia a raquete a bolinha nn encostava totalmente no canto da minha tela, isso acontece tmb quando quando descia a raquete. Porém é claro que eu vi a aula do professor é corrigi esses bugs. Após ja ter finalizado a raquete do oponente (colisão e movimento) fui fazer os testes para ver se estava tudo certinho. E ai vem o bug, notei que o erro da bolinha nn encostar no final da tela quando a raquete estava ou pra cima, ou para baixo, só resolvia quando minha raquete estava bem acima, ou bem abaixo da bolinha, mas quando a bolinha passava muito perto da raquete ela ainda nn encostava no final da tela. Como se aquela solução do professor só funcionasse para quando a raquete estivesse longe da bolinha, porque se estivesse perto continuava nn encostando no final...

Meu código:

let xBolinha = 300; let yBolinha = 200; let diametro = 20; let raio = diametro / 2;

let velocidadeXBolinha = 2; let velocidadeYBolinha = 6;

let xRaquete = 5 let yRaquete = 150 let comprimentoRaquete = 10 let alturaRaquete = 80

let xRaqueteOponente = 585 let yRaqueteOponente = 150 let comprimentoRaqueteOponente = 10 let alturaRaqueteOponente = 80 let velocidadeYRaqueteOponente;

let meusPontos = 0 let pontosOponente = 0

/* let esquerdaBolinha = xBolinha - raio let superiorBolinha = yBolinha - raio let inferiorBolinha = yBolinha + raio

let direitaRaquete = xRaquete + comprimentoRaquete let superiorRaquete = yRaquete - alturaRaquete let inferiorRaquete = yRaquete + alturaRaquete */

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

function draw() { background(0); velocidadeBolinha(); mostraBolinha(); mostraRaquete(); movimentaRaquete(); verificaColisaoRaquete(); verificaColisaoRaqueteOponente() mostrarRaqueteOponente(); movimentaRaqueteOponente() mostrarPlacar() pontos()

if (xBolinha + raio > width || xBolinha - raio < 0){ velocidadeXBolinha *= -1 } if (yBolinha + raio > height || yBolinha - raio < 0){ velocidadeYBolinha *= -1 }

}

function mostraBolinha(){ circle (xBolinha, yBolinha, diametro)

}

function velocidadeBolinha(){ xBolinha += velocidadeXBolinha; yBolinha += velocidadeYBolinha;

}

function mostraRaquete(){ rect (xRaquete,yRaquete,comprimentoRaquete, alturaRaquete)

} function mostrarRaqueteOponente(){ rect (xRaqueteOponente, yRaqueteOponente, comprimentoRaqueteOponente, alturaRaqueteOponente) }

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

yRaquete = constrain (yRaquete, 0, 320) yRaqueteOponente = constrain (yRaqueteOponente, 0, 320) }

function movimentaRaqueteOponente(){ velocidadeYRaqueteOponente = yBolinha - yRaqueteOponente - comprimentoRaqueteOponente /2 - 30 yRaqueteOponente += velocidadeYRaqueteOponente}

function verificaColisaoRaquete(){ if ( xBolinha - raio < xRaquete + comprimentoRaquete & yBolinha - raio < yRaquete + alturaRaquete & yBolinha + raio > yRaquete - alturaRaquete ){ velocidadeXBolinha *= -1 }

}

function verificaColisaoRaqueteOponente (){ if (xBolinha + raio > xRaqueteOponente + comprimentoRaqueteOponente & yBolinha - raio < yRaqueteOponente + alturaRaqueteOponente & yBolinha + raio > yRaqueteOponente - alturaRaqueteOponente ){ velocidadeXBolinha *= -1 } }

function mostrarPlacar(){ fill (255) text (meusPontos,278, 26) text (pontosOponente,321, 26 ) }

function pontos(){ if (xBolinha > 590){ meusPontos += 1

} if (xBolinha < 10){ pontosOponente += 1 } }

1 resposta

Oi Rafael, tudo bem com você?

Poderia me enviar o link do seu projeto? Dessa forma poderei te auxiliar com mais assertividade. No entanto tenho algumas sugestões de como rsolver o problema:

  • Verifique os valores dos limites da raquete: Certifique-se de que os valores dos limites superior e inferior da raquete estão corretos. Eles devem permitir que a raquete se mova até o limite da tela sem problemas.

  • Verifique as condições de colisão: Analise cuidadosamente as condições de colisão entre a bolinha e a raquete. Verifique se todas as extremidades da raquete estão corretamente consideradas nas condições.

  • Verifique as variáveis de velocidade: Certifique-se de que as variáveis de velocidade da bolinha estão configuradas corretamente. Elas devem permitir que a bolinha alcance as bordas da tela mesmo quando a raquete está próxima.

  • Considere o tamanho da bolinha: Verifique se o tamanho da bolinha está correto em relação ao raio e se ele não está impedindo a colisão com as bordas da tela.

  • Verifique a ordem das chamadas de função: Confira se as funções estão sendo chamadas na ordem correta. Por exemplo, a função verificaColisaoRaquete() deve ser chamada antes da função mostrarRaqueteOponente().

  • Verifique a lógica do movimento da raquete: Analise a lógica do movimento da raquete para garantir que ela esteja respondendo adequadamente às teclas de controle.

Essas são apenas algumas sugestões gerais para solucionar o problema. É importante analisar cada parte do código cuidadosamente e fazer testes para identificar o problema específico e implementar a solução adequada.

Espero ter ajudado!

Aguardo sua resposta.

Abraços e até mais!