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

Glitch na parte de cima e baixo

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?

3 respostas

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

solução!

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;
    }
  }