2
respostas

[Bug] Sugestão?

https://scratch.mit.edu/projects/781468380

Esse é estado atual do meu jogo, alguém tem uma sugestão de como conserta o bug que aparece as vezes quando a bolinha engancha na raquete? Tentei mexer na quantidade de passos que a bolinha dá e aumentar a margem de erro, mas não corrigiu totalmente.

2 respostas

Olá Louize, tudo certo?

Primeiramente gostaria de te parabenizar pelo seu código, adorei como criou um sistema próprio de rounds, parabéns pelo empenho!

Esse bug ocorre por definirmos que o contato da bolinha cause uma inversão da direção quando colidir com algo, ou seja, quando ela acerta em um lugar como a parte de baixo da raquete, a bolinha tende a inverter sua direção, mas por ela estar em uma área próxima da borda e da raquete, a colisão faz com que ela volte para borda e da borda volte para raquete, criando assim um loop até sair daquela posição, assim causando a prisão da bolinha.

A nossa primeira solução para esse impasse consistirá em alterar a direção da bolinha de forma definitiva, com um valor bem definido e que não simplesmente inverta a direção. Desse modo, a bolinha é obrigada a seguir esse raio de ação:

  • No ator bolinha, removeremos o bloco “aponte para a direção * (-1)”. Como visto acima é a causa da nossa complicação.

Captura de imagem do jogo Pong no Scratch mostrando o bloco aponte para a direção vezes menos abre parênteses menos um fecha parênteses sendo retirado. O aponte para direção direção vezes menos um está destacado em vermelho

  • Também removeremos o bloco verde com o operador “ou” e substituiremos pelo bloco “tocando em raquete 2”. Como a direção dessa vez é fixa e não uma inversão, agiremos individualmente nas raquetes e não nas duas ao mesmo tempo:

Captura de imagem do jogo Pong no Scratch mostrando, quando a bandeira verde que inicia o jogo for clicada, sempre, se tocando em raquete 2 então, volte. O bloco, se tocando em Raquete2 ? então, está destacado em vermelho

  • Adicionaremos o bloco “aponte para a direção” e nele o bloco “número aleatório entre” e colocaremos os números -30 e -125. Essa opção permite que a direção da bolinha possa variar quando tocar na raquete, porém, também seja redirecionada para um valor pré-definido, permitindo assim uma gama de direções entre esses números. Assim resolvemos o bug da bolinha ficar presa na raquete, ela não poderá ficar presa se sempre apontar para uma direção contrária e concreta.

Captura de imagem do jogo Pong no Scratch mostrando quando a bandeira verde que inicia o jogo for clicada, sempre, se tocando em raquete 2 então, acrescente aponte para a direção e número aleatório entre -30 e -125, este bloco está destacado em vermelho

  • Repetimos no código da outra raquete, alterando os ângulos para 30 e 125.

Captura de imagem do jogo Pong no Scratch mostrando quando a bandeira verde que inicia o jogo for clicada, sempre, tocando em raquete2 então, aponte para a direção, número aleatório entre -30 e -125, toque o som acertar bolinha, se, tocando em raquete então, aponte para direção, número aleatório entre 30 e 125, toque o sim acertar bolinha, volte. O segundo bloco está destacado em vermelho.

No scratch, o ângulo 0 é marcado no eixo y positivo, tendo isso mente usamos os valores -30 e -125 como ângulos negativos, sendo marcados no sentido horário e obtendo semelhança com os ângulos positivos 30 e 125. Como são ângulos negativos, eles também representam um valor positivo dentro da circunferência, desse modo podemos usar seus valores positivos, para isso basta subtrair do ângulo de 360°, usando 330 invés de -30° e 235 invés de -125° tranquilamente, ambos representam o mesmo ponto da reta.

Segue o código funcionando:

Continuação (1/2)...

Continuação (2/2)

Ainda podemos resolver de outra forma se for necessário, tomando algumas medidas focadas na raquete:

  • Colocar a raquete contra a parede para não ter chance de passar para atrás dela;
  • Modificar o código de colisão fazendo com que ao tocar na raquete a posição x da bolinha vá para frente da raquete e mude de direção:

Captura de tela retirada do scratch, na imagem há um código que diz que quando a bandeira for clicada sempre que a bolinha estiver tocando em minha raquete então mude a posição horizontal da bolinha para menos duzentos e quinze e aponte para a direção inversa menos um e toque o som de raquetada. A outra parte do código se refere ao mesmo modelo só que tocando na raquete do oponente ela mudará a posição horizontal da bolinha para duzentos e quinze positivo.

Segue o código abaixo com a segunda forma de solução:

Se precisar de ajuda ou surgir alguma dúvida estamos à disposição, conte conosco!

Um bom dia e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓