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

function de colisão com a raquete se comporta de forma diferente

Olá a todos, tudo bem?

No vídeo 3 da aula 3 (Colisão com a raquete) no minuto 2:50 o professor começa a escrever a função onde a bolinha vai colidir com a raquete. Antes de subtrair o raio de xBolinha ele testa o jogo e a bolinha colide com a borda esquerda e volta.

Comigo, a bolinha não volta. Ela passa direto pela borda e some. Alguém sabe me dizer por que isso ocorre?

Detalhe que quando eu subtraio o raio de xBolinha ela colide e volta normalmente, mas antes não. E meu código está igual >.<

Segue o meu código:

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 30;
let raio = diametro / 2;

//velocidade da bolinha
let = velocidadeXBolinha = 2;
let = velocidadeYBolinha = 2;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete();
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
}

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

function movimentaBolinha() {
    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 mostraRaquete() {
  rect(xRaquete, yRaquete, raqueteComprimento, raqueteAltura);
}

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

function verificaColisaoRaquete() {
  if (xBolinha < xRaquete + raqueteComprimento) {
    velocidadeXBolinha *= -1;
  }
}
4 respostas
solução!

Olá, Vinicius! Tudo bem contigo?

Pude verificar no seu código que você fez uma mudança no valor do diâmetro da bolinha para "30". Sendo assim, quando fazemos essa modificação, precisamos alterar também alguns cálculos na lógica de algumas funções, como na function verificaColisaoBorda()

Fiz alguns testes e alterei o cálculo apenas trocando o valor da condição de 0 para 2, e a sensibilidade da colisão com a borda funcionou no meu P5 :)


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

Você poderia testar e verificar se funciona no seu projeto?

Ah, uma coisa legal é que você tem a possibilidade de testar com os valores dados pelo professor ou então refazer alguns cálculos. Sugiro que você teste o código com os valores do instrutor e depois trabalhe em cima de suas customizações, certamente seu projeto ficará incrível e gostaria muito que você compartilhasse conosco! :)

Espero ter conseguido ajudar você, qualquer dúvida estamos aqui!

Um abraço!

Camila, você é demais. Testei e funcionou, mesmo com o valor 1 deu certo aqui. Não tava ligado que o valor do diâmetro iria ter influência na sensibilidade. E achava que o fato da borda ser o 0 seria o suficiene pra parar a bolinha.

Por enquanto vou continuar seguindo os mesmos valores do professor e depois tentarei reconstruir do zero e fazendo customizações sim.

Muito obrigado pela ajuda! :)

Muito obrigada, Vinicius <3 ! Fico muito feliz que tenha funcionado direitinho!

Vocé é demais por procurar testar e implementar novos valores, curiosidade e persistência são fundamentais pro nosso aprendizado!

Estou ansiosa para ver suas customizações, não esquece de compartilhar com a gente!

Ah, e se aparecer qualquer dúvida , pode contar conosco sempre!

Um super abraço e bons estudos! :D

Depois eu compartilho sim, e qualquer dúvida eu grito :))

Brigadão!!