1
resposta

"mostraRaquete" não está definido no escopo atual.

Ao tentar recriar o que aprendi durante a aula na aula 3 do curso Lógica de programação: comece em lógica com o jogo Pong e Javascript, aparece o seguinte erro no meu código: MostraRaquete is not defined. Gostaria de saber o que estou fazendo de errado.

Esse é meu código:

//variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro / 2;

//velocidade da bolinha
let velocidadexBolinha = 6;
let velocidadeyBolinha = 6;

//variaveis da raquete
let xRaquete =5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete();
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
}

  function mostraBolinha(){
    circle(xBolinha, yBolinha, diametro);
  }

  function movimentaBolinha(){
    xBolinha += velocidadexBolinha;
    yBolinha += velocidadeyBolinha;
  }

function verificaColisaoBorda(){
  if (xBolinha + raio > width ||
     xBolinha - raio< 0){
    velocidadexBolinha *= -1;

  }
  function verificaColisaoBorda(){
  if (yBolinha + raio> height ||
     yBolinha - raio< 0){
    velocidadeyBolinha *= -1;
}

}
  function mostraRaquete(){
  rect(xRaquete, yRaquete, raqueteComprimento, raqueteAltura);
}

  function movimentaMinhaRaquete(){
    if (keyisDaown(UP_ARROW)){
      yRaquete -= 10;
    }
    if (keyisDaown(UP_ARROW)){
      yRaquete += 10;
    }
  }
  function verificaColisaoRaquete(){
    if (xBolinha - raio < xRaquete + raqueteComprimento &&
       yBolinha - raio < yRaquete + RaqueteAltura &&
       yBolinha + raio > yRaquete){
      velocidadexBolinha *= -1;
    }
    }
  }
1 resposta

Olá, Joselma, tudo bem?

Desculpe a demora em obter retorno.

Analisei o seu código e identifiquei alguns erros que está gerando esse comportamento.

Notei que você criou duas funções com o mesmo nome verificaColisaoBorda, e em cada uma delas você coloca o código correspondente a colisão das bordas, na altura e largura. Ao criar duas funções com o mesmo nome, você cria conflitos no código, as funções deverão ser únicas. Para solucionar, você poderá mudar o nome de uma dessas funções e chamá-la na função draw, ou, como se trata de um código que trata do mesmo comportamento (colisão com as bordas), colocar os ifna mesma função, como o instrutor utilizou. O código ficará assim:

function verificaColisaoBorda(){
  if (xBolinha + raio > width ||
     xBolinha - raio< 0){
    velocidadexBolinha *= -1;

  }
  if (yBolinha + raio> height ||
     yBolinha - raio< 0){
    velocidadeyBolinha *= -1;
}

}

Na função movimentaMinhaRaquete você coloca keyisDaown, o correto seria keyIsDown, que seria em português a tecla está abaixada (pressionada). Ainda nessa função, você coloca UP_ARROW em ambos os if. O correto é um ser UP_ARROW, que corresponde a seta apontando para cima e outro seria DOWN_ARROW que corresponde a tecla apontando para baixo. Segue o código abaixo:

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

Na função verificaColisaoRaquete, você coloca variável RaqueteAltura, porém, ela foi definida anteriormente como raqueteAltura, o JavaScript é case-sensitive, ele diferencia caixa alta e caixa baixa, ou seja, caracteres maiúsculos de minúsculos são considerados diferentes. O código ficará assim:

function verificaColisaoRaquete(){
    if (xBolinha - raio < xRaquete + raqueteComprimento &&
       yBolinha - raio < yRaquete + raqueteAltura &&
       yBolinha + raio > yRaquete){
      velocidadexBolinha *= -1;
    }
  }

Espero ter ajudado.

Fico à disposição caso surja dúvidas.

Abraços e bons estudos!

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