7
respostas

Eu não consigo entender a lógica por trás do codigo de colisão!!

Olá, eu assisti as três primeiras partes dessa aula e consegui entender as outras duas, porém eu não consegui entender a colisão da bolinha na raquete, o porque de ser o xBolinha ou yBolinha subtraindo ou somando o raio eu entendo, mas as parte das variáveis da raquete eu não consigo, já re-assisti o vídeo, os outros videos também, vim aqui no fórum procurar outras pessoas com o mesmo tipo de dúvida, até achei algumas e algumas resposta que me fizeram refletir e tals, mas ainda sim estou confuso, tentei até revisar meu código no P5, ver e re-entender a lógica por trás dos outros códigos como o de fazer a bolinha mexer, de colisão com a borda, mas ai eu começei a chegar em um abismo MUITO mais profundo, onde esses comandos tão fáceis e simples começaram a parar de fazer sentido, e a esse ponto eu tava me fazendo perguntas bem mais complexas, e tentar entender a lógica por mim mesmo testando diversas teorías, como o código ir se repetindo de novo e de novo, e outra aonde como as variáveis da raquete estavam como números normais, 5, 150, 10, 90, e que eles se somavam e subtraia e acabava refletindo no plano cartesiano que o P5 usa, no inicío chegou a fazer sentído, mas percebi que não, é por isso que esse curso serve, para aprender a lógica de programação, que futuramente ajudará para lídar com códigos mais complexos, porém o instrutor poderia falar isso, ir nos passando essa lógica conforme ele vai escrevendo os códigos, ele acaba explicando de um jeito bem mais vago, aonde muitas coisas acabam dando dúvida, ele não ensina mal, pelo contrário, é muito bom e bem intuitívo, mas faltou explicar com mais detalhe, a lógica por trás do código ou porque isso é assim, porque é estruturado dessa forma, se alguem ou instrutor da alura souber me ajudar eu agradeço.

Abaixo o código do instrutor:

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

Muito Obrigado!!

7 respostas

Boa noite, Leandro!

Vamos relembrar onde cada coordenada importante referente ao código da bolinha e da Raquete se encontram:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Raquete - coordenadas referente a x

Raquete - coordenadas referente a y

Beleza, agora vamos ponto ao ponto dentro do if, delimitando por cores cada área que torna a sentença verdadeira sobre o ponto de vista da bolinha até então:

1 - xBolinha - raio < xRaquete + raqueteComprimento:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 - yBolinha - raio < yRaquete + raqueteAltura:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 - yBolinha + raio > yRaquete:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Pelas figuras, percebemos que onde todas essas sentenças são verdadeiras fica nesta região:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Logo, quando a bolinha tocar na raquete, ela estará no limite direito desta região, assim, a bolinha será ricocheteada para o lado contrário de onde veio.

Eu até consegui entender isso um pouco, mas eu não entendo tipo, aquela zona roxa então é quando todas informações estão verdadeiras para essa colisão acontecer, então como a bolinha consegue voltar se ela for em outra área, como o computador entende que é a raquete para poder colidir, porque a colisão é feita com base nas variáveis que são números fixos, para o computador o quadrado não é nada, só um fantasma, ou eles se auteram quando é a formado a raquete? Por isso a função do código do quadrado vem primeiro na hora de programar o jogo? isso eu não consigo entender, quando o quadrado se mexe, isso muda o x e o y dele, mas como o computador compreende isso para enfim colidir a bolinha? Essa é a minha dúvida, por que o código tem que ser estruturado dessa forma para isso acontecer? Isso são coisa que o instrutor não vai passando pra gente entender a lógica da programação, muitas das vezes ele só digita e da uma leve explicação seca, acho que ele podia explicar de maneira um pouco mais detalhada sobre essas coisas, de novo ele é um ótimo professor, eu só acho que falta esses pequenos detalhes para a aula ficar mais didática!!!

Muito obrigado

Estava com a mesma dúvida do colega, mas com o primeiro desenho apresentado ai na explicação, com as coordenadas referentes ao código da bolinha e da Raquete, ficou muito claro pra mim. Obrigado Nícolas Babolin Santos

Boa noite, Leandro, vou responder suas perguntas:

  • "Como a bolinha consegue voltar se ela for em outra área? "

    R: Caso a bolinha não colida com a raquete, ela colidirá com a borda, e, para isso, já temos a função verificaColisaoBorda(), que faz a bolinha voltar quando ela toca a borda da "quadra".

  • "Como o computador entende que é a raquete para poder colidir?"

    R: O computador entende que ali há uma "raquete" por termos definido suas coordenadas x e y e seu tamanho e altura junto as estruturas condicionais impostas na função verificaColisaoRaquete().

  • "Porque a colisão é feita com base nas variáveis que são números fixos, para o computador o quadrado não é nada, só um fantasma, ou eles se alteram quando é formado a raquete? "

    R: A colisão é feita com base nas variáveis pois, através delas, é possível guardar informações de inúmeras formas e, na atividade, elas são principalmente utilizadas na criação de colisão da raquete para guardar números continuamente graças a função draw(), que executa continuamente as linhas de código contidas em seu bloco e, dessa forma, as variáveis são continuamente alteradas em razão de estarem guardando informações o tempo todo.

  • "Por isso a função do código do quadrado vem primeiro na hora de programar o jogo? "

    R: Neste caso, essa escolha da declaração da função não interfere no código.

De resto, acho também que o professor deveria ter mais cuidado em explicar algumas coisas que precisam de uma abordagem um pouco mais detalhada, mas, enfim, bons estudos!

Disponha Leomar, bons estudo!!

Caramba, agora acho que clareou minha mente, muito obrigado Nícolas!!!

Disponha Leandro, de pouco em pouco construímos o nosso aprendizado, bons estudos!!