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

bolinha ficando presa atras da minha raquete

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

2 respostas

Oi Stephany, tudo bem? Espero que sim!

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 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 os pontos infinitos e 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 definido e conseguimos resolver esse impasse:

  • 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 coloque os números -30 e -125. Essa opção permite que a direção da bolinha seja tanto variada, permitindo uma gama de direções e ao mesmo tempo concreta, definindo que dentro daquele campo de ação a bolinha vai ser direcionada. Assim resolvemos o bug da pontuação duplicada e da bolinha ficar presa na raquete, ela não poderá ficar presa se sempre apontar para uma direção contrária 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

Continuação (1/2)

solução!

Continuação (2/2)

  • 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.

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.

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 ✓