6
respostas

[Bug] Pontuação do oponente conta 3 pontos a cada batida na borda

fiz meu código de acordo com o passado no vídeo, mas o contador de pontos está dando 3 pontos a cada batida na borda, para o oponente... Se ajusto o número da posição, ele para de contar os pontos mesmo encostando na borda!!imagem do código inserido quando bate na borda contabiliza 3 pontos

6 respostas

Bom dia Julia,

coloca o link do seu código no Scratch aqui, pode ser algum problema em outro trecho da sua lógica.

Ajuste para -227 a condicional de colisão e veja se resolve.

-227 também é um bom número!

Verifica a posição das raquetes quando o jogo inicia,

Raquete 1 x -232 Insira aqui a descrição dessa imagem para ajudar na acessibilidadeRaquete 2 x 232 Insira aqui a descrição dessa imagem para ajudar na acessibilidadePonto pro jogador 1 quando x da bolinha for maior que 232 Ponto pro jogador 2 quando x da bolinha for menor que -232

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

Bom dia, Júlia!

Acredito que o problema seja devido a velocidade de processamento do comando. A explicação é um tanto comprida, mas de nada adianta eu te dar a solução sem antes tu entender por que ela funciona.

No seu código atual, quando a bolinha está em uma posição inferior a -229 (p.ex: -235) então o ponto é computado. Até aí, tudo bem, esse era o comportamento esperado. Quase que instantaneamente, o bloco de código então volta para o início da execução (no bloco mais externo - "sempre").

O problema é que seu computador processa isso de maneira tão rápida que ele reinicia a execução dos blocos internos ( "espere até que" e do "adicione 1") antes mesmo de a bolinha ter saído deste limite inferior de -229 que você definiu. Por exemplo, ela pode ter batido na parede e está voltando, mas ainda se encontra na posição -230 (que é inferior ao limite que você definiu). Neste caso, serão computados dois pontos quando, na verdade, deveria ser computado apenas 1, entendeu? Quanto mais rápido o processamento do seu computador, mais pontos serão computados.

Alguns colegas sugeriram ajustar o limite de forma a deixar o tempo de processamento mais apertado, porém esta não é a solução mais adequada porque sempre dependerá da velocidade de processamento, e isso muda de máquina para máquina.

Para resolver isso de maneira mais adequada, que funciona para qualquer computador, você pode criar um "filtro". A lógica é a seguinte:

  1. Assim que o limite de -229 é ultrapassado então o ponto é computado (isso é o que o teu código já faz);
  2. Depois que o ponto é computado, espera até que "posição x > 0" ;

O passo 2 garante que o código só volte a executar novamente depois que a bolinha já voltou para o lado do adversário (passa da metade da tela do jogo). No caso do lado oposto, a lógica inverte. Se o limite é 229, então você tem que ajustar o filtro para esperar até que "posição x < 0".

Veja o meu código como exemplo:

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