Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Outra solução para travamento da bola atrás da raquete

Olá.

Entendo que, pelo código original, traçamos linhas (superfícies das raquetes) sobre as quais são atribuídas as colisões. Dessa forma, eventualmente uma bola pode vir "por trás" das raquetes, colidindo com essa linha e com a borda vária vezes até que saia pelo outro lado ou, até mesmo, extrapolando o campo visual e indo para o "limbo"... Em qualquer caso, para ocorrer o bug, a bola já teria tocado o fundo primeiramente, o que configura um ponto.

Então, para evitar o rebote da bola e para não deixar de marcar o ponto, simplesmente escrevi o código prevendo que, no caso de a bola "vir por detrás das raquetes" (velocidade negativa para a raquete da direita e positiva para a raquete da esquerda), ele desconsideraria a colisão. Assim a bola segue seu rumo natural, sem desvios, e o ponto é marcado.

Acrescento que implementei um único código (função raquetada()) para as duas raquetes, baseados em condicionais (vários "e" para cada raquete e um "ou" para separar as raquetes). Os valores 17, 60, 583, etc. nas condições têm a ver com a espessura das minhas raquetes e com o afastamento delas das bordas da tela, logo são irrelevantes. Por fim, "somRaq" é a minha variável carregada com o som da "raquetada".

function raquetada() {
  if (((xBola<17) && (yBola>(yraq1-raioBola)) && (yBola<(yraq1+60+raioBola)) && (xVeloc < 0)) || ((xBola>583) && (yBola>(yraq2-raioBola)) && (yBola<(yraq2+60+raioBola)) && (xVeloc > 0))) {
    xVeloc *= -1;
    somRaq.play();
  }
}

Como o código é simples e curto, não vejo problemas nessas escolhas. Mas e se fosse complexo e longo, esse grande número de condições atrasaria o processamento de alguma forma?

Obrigado.

1 resposta
solução!

Opa, tudo ok por aí?

Sobre a sua solução para esse bug ela é totalmente plausível e funciona muito bem.

A sua lógica de gerar fazer com que a bolinha vá para uma posição especifica quando começar aquele efeito loop de bater na “parede” e na “raquete” foi muito legal e interessante.

Parabéns por pensar em algo desse tipo e compartilhar com os outros estudantes aqui na plataforma.

Sobre a sua dúvida em relação à um código assim gerar problema em um projeto grande:

  • Na verdade ele não gera problemas, se ele estiver organizado e bem indentado, e for de fácil compreensão como é o nosso caso então não, não gera problemas pode ficar tranquilo, pois você somente está adicionando várias condições dentro de um único if, pior seria criar vários if´s com um monte de comandos repetidos, não geraria problemas mas não é legal e nem recomendado fazer isso.
  • Deixo abaixo também um artigo que fala sobre clean code:

Recomendo que caso se sinta confortável em compartilhar seu conhecimento, interagir com outros estudantes, trocar experiências e fazer networking, que participe do Discord oficial da Alura de alunas e alunos:

Em suma era isso, caso tenha dúvidas ou problemas relacionados ao curso recorra ao fórum!

E mais uma vez parabéns por sua atitude.

Um grande abraço e bons estudos.