1
resposta

[Dúvida] raquete bater nas bordas

Bom dia.

Fiz o código constrain para não bater nas bordas, porem ao executar minha raquete bate na borda inferior normalmente e na superior ela atravessa a borda, já a raquete do oponente atravessa as bordas superior e inferior.

https://editor.p5js.org/Murilofreitas/sketches/3mJipxIfK

1 resposta

Bom dia, Murilo! Como você está?

Em cada função, há um motivo diferente pelo qual o constrain() não está sendo aplicado corretamente. Vamos lá:

Na função movimentaMinhaRaquete(), a linha yRaquete = constrain(yRaquete, 10, 310); está dentro da condição if que verifica o movimento para baixo, por isso, o movimento só está restrito enquanto a seta para baixo estiver pressionada. Seu código deve ficar assim:


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

Já em movimentaRaqueteOponente(), há um errinho de sintaxe. A variável do valor y da raquete do oponente está definida com a letra inicial "O" minúscula, porém, na linha do constraint, está chamada com a letra "O" maiúscula. Alterar essa letrinha já resolve o problema:

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteoponente - raqueteComprimento / 2 - 30; yRaqueteoponente += velocidadeYOponente; 
   yRaqueteoponente = constrain(yRaqueteoponente, 10, 310); 
}

Porém, seria legal que o nome da variável fosse yRaqueteOponente, com cada inicial maiúscula. Esse tipo de nomenclatura é chamada de Camel Case, e é uma boa prática seguir um padrão de nomenclatura em todo o projeto. Sei que dá um pouquinho a mais de trabalho, mas é um detalhe que vai refinar bastante a qualidade do seu jogo :)

Vou deixar aqui um artigo bem legal que fala sobre os padrões de nomenclatura, caso você fique curioso:

Abraços, Murilo! Se precisar de alguma ajudinha, estamos por aqui.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!