7
respostas

Dúvida sobre a descrição do código

Como outros mencionaram, realmente a colocação das variáveis demonstradas no vídeo fazem a raquete deixar de colidir com a bola, então creio que seria interessante o vídeo passar por uma atualização, porque eu particularmente perdi muito tempo tentando corrigir o problema incorrigível.

Sobre a minha dúvida, é referente à descrição do código.

O código demonstrado no vídeo é:

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

A primeira linha faz sentido pra mim, visto que se refere ao fato da bola colidir com a superfície da raquete. Mas nas outras linhas, o código é descrito de uma forma que não faz muito sentido pra mim.

Na minha cabeça, a lógica deveria ser a seguinte:

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

Por que o programa não reconhece se descrevermos dessa forma? Porque faz sentido. Na segunda linha eu estaria dizendo ''se a parte superior da bolinha for maior do que a parte de baixo da raquete'' e na terceira ''se a parte inferior fa bolinha estiver acima da parte superior da raquete''. Devo estar deixando algo passar, já quebrei a cabeça com isso e não consegui chegar a uma conclusão até esse momento kkkkkkk

7 respostas

"Como outros mencionaram, realmente a colocação das variáveis demonstradas no vídeo fazem a raquete deixar de colidir com a bola, então creio que seria interessante o vídeo passar por uma atualização, porque eu particularmente perdi muito tempo tentando corrigir o problema incorrigível."

onde você viu isso?? perdi um bom tempo batendo cabeça e nao funcionou....é por isso então?!?!

tentar explicar, sem saber programação e sem desenhar é dificil...

function verificaColisaoRaquete(){ if (xBolinha - raio < xRaquete + raqueteComprimento

& yBolinha - raio > yRaquete + raqueteAltura (aqui você estaria jogando o "sensor de colisao" da bolinha no topo dela, e o "sensor de colisao" da raquete, voce joga no pé da raquete, entao se o "sensor" da bolinha for maior, significa que ela está abaixo da raquete, lembra que o eixo Y, quanto mais pra baixo, maior, logo assim, nao colide com a raquete) foi isso acho que vc perguntou?

isso se aplica a próxima linha... ve se vc consegue entender por esse raciocinio a proxima linha....ou se alguem me corrija ... vai que to errado XD & yBolinha + raio < yRaquete){ velocidadeXBolinha *= -1 } }

Vi alguns comentando em outro post de dúvida amigo. Um cara disse que falou com o suporte e eles disseram que não funciona realmente. Valeu pela resposta, mas a minha dúvida continua kkkkkkkk. Vou tentar explicar de uma forma mais simples. A maneira correta, como eu demonstrei na mensagem, ''se a extremidade esquerda da bolinha for menor do que a extremidade direita da raquete & se a extremidade superior da bolinha for menor do que a extremidade inferior da raquete & se a extremidade inferior da bolinha for maior do que a extremidade superior''. Nesse caso, por que não dizer ''se a extremidade superior da bolinha for menor do que a extremidade inferior da raquete & se a extremidade inferior da bolinha for maior do que a extremidade superior da raquete''? Não sei se deu pra entender. Desenhei no paint pra ver se tu compreende kkkkkkk. Eu já dei prosseguimento às aulas, mas confesso que até o momento não entendi muito bem a lógica desse código em particular. Eu tentei fazer da outra maneira, mas realmente não dá. simulação da explicação

se a extremidade superior da bolinha for menor do que a extremidade inferior da raquete & se a extremidade inferior da bolinha for maior do que a extremidade superior (da raquete) se a extremidade superior da bolinha for menor do que a extremidade inferior da raquete & se a extremidade inferior da bolinha for maior do que a extremidade superior da raquete

eu copiei e colei pra ter certeza, mas você escreveu a mesma coisa kkkkk

acredito que você está com dificuldades de entender por que assim não pode: superior bola > inferior raquete & inferior bola < superior raquete

se for isso, o topo da bola sendo maior de que o inferior da raquete, significa que a bola passaria por baixo.... quanto maior o Y, mais pra baixo ela vai o mesmo serve pra outra parte, a parte debaixo da bola menor que a parte de cima da raquete, ela passaria por cima....e lembrando que estamos tentando fazer acontecer a colisão... e talvez algo que nao ficou explicito, quando usamos o "&", "and", todas as condições precisam ser atendidas para dar sequencia ao codigo... se uma das 3 condiçoes nao for atendida, ja nao executaria a parte seguinte

vamos ver se estamos chegando la

Pessoal com relação ao código da atividade 5, as variáveis tem que estar dentro da função verificaColisaoRaquete, pelo que olhei em alguns outros topicos se colocar ele no inicio como variável normal não vai funcionar, porque durante o código as variaveis xRaquete e yRaquete se modificam, pelo menos foi isso que eu entendi se estiver errado me corrijam.

Ficou assim no meu e funcionou, e ficou mais facil de entender também a condição:

function verificaColisaoRaquete(){

let esquerdaBolinha = xBolinha - raio;
let superiorBolinha = yBolinha - raio;
let inferiorBolinha = yBolinha + raio;

let direitaRaquete = xRaquete + raqueteComprimento;
let superiorRaquete = yRaquete;
let inferiorRaquete = yRaquete + raqueteAltura;

if(esquerdaBolinha < direitaRaquete && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete){ velocidadeXBolinha *= -1; }

Muito obrigado douglas, graças ao seu post consegui fazer com que meu código reconhecesse toda a minha raquete criando uma colisão mais realista, confesso que tive uma dificuldade mas consegui! Espero ser seu colega de trampo um dia tmj

Estamos aqui para nós ajudar ! certeza que alguma hora você que irá me ajudar !

Olá pessoal, fiz dessa forma e funciono:

function variaveisDaColisãoRaqueteComABolinha() {
 esquerdaBolinha = xBolinha - raio;
 superiorBolinha = yBolinha - raio;
 inferiorBolinha = yBolinha + raio;
    
 direitaRaquete = xRaquete + comprimentoRaquete;
 superiorRaquete = yRaquete;
 inferiorRaquete = yRaquete + alturaRaquete;
}

Criei uma function ao invés de criar as variáveis no inicio e chamei essa function em draw() antes da ''function verificaColisaoRaquete'' :

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBolinhaBorda();
  mostraRaquete();
  movimentaMinhaRaquete();
  variaveisDaColisãoRaqueteComABolinha();
  verificaColisaoRaqueteBolinha();