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

[Dúvida] Bolinha passa das bordas e não volta

Olá pessoal! Uma dúvida aqui>

se eu uso o código dessa maneira:

//variaveis da bolinha
let xBolinha = 250;
let yBolinha = 200;
let diametro = 15; //x da bolinha é o centro dela.
let raio = diametro/2;
let dirBolinha = xBolinha + raio;
let esqBolinha = xBolinha - raio;
let supBolinha = yBolinha - raio;
let infBolinha = yBolinha + raio;

//velocidade da bolinha
let velocidadexbolinha = 4;
let velocidadeybolinha = 4;

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

function draw(){
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBordas();
  minhaRaquete();
  movimentarRaquete();
  //colisaoRaquete();
  colisaoRaqueteCopia();
}

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

function movimentaBolinha(){
  xBolinha += velocidadexbolinha;
  yBolinha += velocidadeybolinha;
}

function verificaColisaoBordas(){
    if (xBolinha + raio > width || xBolinha - raio < 0){
    velocidadexbolinha *= -1;
  }
  if ((yBolinha + raio) > height || yBolinha - raio < 0){
    velocidadeybolinha *= -1;
  }
}

Funciona, MAS, se eu troco a função verificaColisaoBordas por:

function verificaColisaoBordas(){
    if (dirBolinha > width || esqBolinha < 0){
    velocidadexbolinha *= -1;
  }
  if ((infBolinha) > height || supBolinha < 0){
    velocidadeybolinha *= -1;
  }
}

A função para de funcionar e a bolinha ultrapassa as bordas para nunca mais voltar. porque ocorre isso neste caso?

Obrigada!

2 respostas
solução!

Olá, Walkyria! Tudo bem?

A diferença entre as duas versões da função verificaColisaoBordas está na forma como você está calculando as posições das bordas da bolinha.

Na primeira versão, você está usando as variáveis xBolinha e yBolinha diretamente para verificar se a bolinha ultrapassou as bordas. Já na segunda versão, você está usando as variáveis dirBolinha, esqBolinha, supBolinha e infBolinha.

O problema é que, na segunda versão, você está calculando essas variáveis apenas uma vez, no início do programa, antes de qualquer movimentação da bolinha. Isso significa que elas não serão atualizadas a cada quadro, e a verificação de colisão não funcionará corretamente.

Para corrigir isso, você precisa atualizar essas variáveis dentro da função movimentaBolinha, assim como você faz com as variáveis xBolinha e yBolinha. Dessa forma, elas serão recalculadas a cada quadro e a verificação de colisão funcionará corretamente.

Veja como ficaria a função movimentaBolinha com as atualizações:

function movimentaBolinha(){
  xBolinha += velocidadexbolinha;
  yBolinha += velocidadeybolinha;

  dirBolinha = xBolinha + raio;
  esqBolinha = xBolinha - raio;
  supBolinha = yBolinha - raio;
  infBolinha = yBolinha + raio;
}

Com essa alteração, a segunda versão da função verificaColisaoBordas deve funcionar corretamente.

Bons estudos!

Obrigada!! Realmente detalhes que eu ainda estou aprendendo :)