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

O código não executa a função de colisão depois das mudanças sugeridas na aula "Para saber mais: Entendendo a colisão"

Boa tarde! Depois de executar a criação das novas variáveis e alteração na função que verifica a colisão, como indicado na aula mencionada em epígrafe, a bolinha começou a atravessar a raquete. Alguém poderia me explicar o que posso estar fazendo de errado? Segue o link do meu código após as alterações https://editor.p5js.org/RonieFM/sketches/2sUHukKRy Desde já, obrigado pela presteza! Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Opa Ronaldo, tudo certo?

O problema em questão ocorre por conta do escopo onde estamos declarando essas variáveis. As variáveis estão sendo definidas fora da função verificaColisaoMinhaRaq(), e seus valores não são atualizados conforme a bola e a raquete se movem:

function verificaColisaoMinhaRaq(){
  let direitaMinhaRaq = xMinhaRaquete + compMinhaRaquete;
  let superiorMinhaRaq = yMinhaRaquete;
  let inferiorMinhaRaq = yMinhaRaquete + altMinhaRaquete;
  let esquerdaBola = xBola - raio;
  let superiorBola = yBola - raio;
  let inferiorBola = yBola + raio;
  if (esquerdaBola < direitaMinhaRaq &&
     superiorBola < inferiorMinhaRaq &&
     inferiorBola > superiorMinhaRaq){
     velocidadeXBola *= -1;
  }
}

Fico à disposição.

Tenha um bom dia e bons estudos.

Olá, Gabriel! Estou bem, obrigado! E você? Assim, pode ser uma pergunta bem boba, mas por que as outras variáveis são "puxadas" e executadas, mesmo estando fora de suas respectivas funções? Confesso que não consegui entender isso muito bem. Muito obrigado pelo esclarecimento! Fazendo essa alteração, tudo voltou a funcionar normalmente.

solução!

Opa Ronaldo.

Boa pergunta!

Tudo depende do objetivo das variáveis que estamos declarando, como, por exemplo, no caso das variáveis dentro do escopo (local de onde se encontra a variável) da função verificaColisaoMinhaRaq(), seu objetivo é armazenar valores já existentes em outras variáveis e que são modificados ao decorrer do código.

A partir disso temos duas possíveis soluções, considerando que queremos verificar a colisão, precisamos de valores exatos do momento que ocorrer o toque entre a bolinha e raquete. Por conta disso, temos que atribuir o valor e verificar a colisão da bolinha somente nesse ponto específico.

No caso da aula, decidimos declarar as variáveis e atribuir o valor no momento da sua execução, porém, poderíamos ter declarado as variáveis fora do escopo da função com um valor vazio e posteriormente atribuir os valores:

let esquerdaBola;
let superiorBola;
let inferiorBola;

let direitaMinhaRaq;
let superiorMinhaRaq;
let inferiorMinhaRaq;

function verificaColisaoMinhaRaq(){  
esquerdaBola = xBola - raio;
superiorBola = yBola - raio;
inferiorBola = yBola + raio;

direitaMinhaRaq = xMinhaRaquete + compMinhaRaquete;
superiorMinhaRaq = yMinhaRaquete;
inferiorMinhaRaq = yMinhaRaquete + altMinhaRaquete;

O resultado é o mesmo. As variáveis são declaradas e puxadas de acordo com sua necessidade, como essas variáveis só seriam usadas dentro da função verificaColisaoMinhaRaq(), não houve necessidade de declará-las fora dela.

Espero ter esclarecido suas dúvidas! Deixo abaixo a recomendação caso queira se aprofundar no assunto um artigo sobre o assunto:

Qualquer dúvida, fico à disposição.

Tenha um bom dia e bons estudos.