2
respostas

Raquete ultrapassa o limite da tela criada

Conforme apertamos a tecla seta para cima, o programa vai diminuindo o valor da referência y da raquete e ela vai subindo. Só que notei que ela passa da tela criada, ou seja, não tem um limitador que não deixa por exemplo o valor de y da raquete diminuir mais que 0, chegando a valores negativos e com isso a raquete passando do limite da tela. Como a gente poderia consertar isso? Daria para usar um While?

function movimentaMinhaRaquete() { if (keyIsDown(UP_ARROW)) { yRaquete -=10; } if (keyIsDown(DOWN_ARROW)) { yRaquete += 10;

    Pensei em algo para limitar o valor de yRaquete não deixando ele ficar negativo. Gostaria de saber como poderia fazer isso.
2 respostas

Olá, eu encontrei duas soluções para o problema.

Na primeira eu criei uma função que verifica se a raquete colidiu com a borda e não deixa ela passar do limite da tela

function colisãoRaqueteBorda (){

  if ( yRaquete < 0 ){
     yRaquete = -1; }

  if ( yRaquete + alturaRaquete > 400){ yRaquete = 349;}
  }

Na segunda eu criei duas funções que verificam se a raquete colidiu com as bordas da tela e chamei elas dentro da função move raquete, as duas funções são condições para que a raquete só se mova caso ela for maior que zero e menor que 400:


function moveRaquete(){
     if (keyIsDown(UP_ARROW)){ if (limeteBordaSuperior()){yRaquete -= 8;}
 }

     if (keyIsDown(DOWN_ARROW)){ if (limeteBordaInferior()){yRaquete += 8;}

 }
}

  function limeteBordaSuperior(){
    return  yRaquete > 0
  }

  function limeteBordaInferior(){
    return yRaquete + alturaRaquete < 400
  }

ps: nos dois casos a minha tela tem 400 de altura.

Espero ter ajudado.

Opa, tudo bem? Minha solução para esse problema foi adicionar as seguintes linhas de código dentro da função de movimentação da raquete:

  if (yRaqJog + altRaq > height){yRaqJog = height - altRaq}
  if (yRaqJog < 0){yRaqJog = 0}

Assim, toda vez que a raquete ultrapassa um pouquinho as bordas superior e inferior, o código automaticamente reposiciona a raquete dentro dos limites, e consequentemente a raquete não sai da tela em momento nenhum.

Dá para aplicar o mesmo código para a raquete do oponente, substituindo as variáveis adequadas e obter o mesmo resultado.