1
resposta

A bolinha esta mudando de direção muito antes de tocar na raquete

E a bolinha as vezes fica presa na raquete Codigo

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

//variaveis da raquete
let xRaquete = 5
let yRaquete = 150
let raqueteAltura = 10
let raqueteComprimento = 90

// veocidade da bolinha
let velocidadeXBolinha = 6; 
let velocidadeYBolinha = 6;


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

function draw() {
  background(0);
  mostrarBolinha ();
  movimentarBolinha (); 
  verificaColisaoBorda ();
  mostarRaquete();
  movimentaMinhaRaquete();
  verificaColisaoRaquete();

function mostrarBolinha (){
  circle (xBolinha, yBolinha, diametro);
}

function movimentarBolinha (){
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

function verificaColisaoBorda (){
  if (xBolinha + raio > width || xBolinha - raio < 0) {
      velocidadeXBolinha *= -1
      }

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

}

function mostarRaquete(){
  rect(xRaquete, yRaquete, raqueteAltura, raqueteComprimento)
}

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)) {
        yRaquete -= 10;
  }

  if (keyIsDown(DOWN_ARROW))
    yRaquete += 10
  }

function verificaColisaoRaquete() {
    if (xBolinha - raio < xRaquete + raqueteComprimento
        && yBolinha - raio < yRaquete + raqueteAltura
        && yBolinha + raio > yRaquete) {
        velocidadeXBolinha *= -1;
    }
}
}
1 resposta

Olá Rafael, tudo bem?

Peço desculpa pela demora para respondê-lo.

Você pode adicionar a seguinte função para fazer com que essa situação não ocorra mais no seu projeto.

function BolinhaNaoFicaPresa() {
    if (xBolinha - raio <= 0){
      xBolinha = 35;
    } else {
if (xBolinha - raio >= 588){
        xBolinha = width - 35;
      }
    }
}

Com esse código a bolinha sempre será movida para a frente da raquete quando estiver próxima da borda, dessa forma evitamos que a bolinha fique presa:

  • O primeiro if verifica se borda da bolinha (xBolinha - raio) chegou até o canto esquerdo da tela (posição 0), quando isso acontece, movemos a posição horizontal da bolinha (xBolinha) para a frente da raquete do usuário:
if (xBolinha - raio <= 0){
      xBolinha = 35;
}
  • O segundo if segue a mesma ideia do primeiro, porém, ele atua na borda direita da tela. Utilizamos o valor da largura da tela (width) para quando a bolinha passar da raquete retornar um pouco a frente da borda e da raquete do oponente:
if (xBolinha - raio >= 588){
        xBolinha = width - 35;
     }

Espero que eu tenha conseguido lhe ajudar. Caso tenha mais algum problema ou dúvida com relação a esse tópico, estarei à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.