1
resposta

[Dúvida] esta dando erro no ecript q eu não estou entendendo "mostrarRaquete();"

//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;


//bariaveis da Minha raquete
let xRaquete = 5
let yRaquete = 150
let raqueteComprimento = 10
let raqueteAltura = 110


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

function draw() {
  //fundo
  background(0);

  //Bolinha
  mostrarBolinha();
  movimentaBolinha();
  verificaColisaoBorda();

  //M Raquete
  mostrarRaquete();
  movimentarMinhaRaquete();




}


function mostrarBolinha() {
  circle(xBolinha, yBolinha, diametro)
}


function movimentaBolinha() {

  xBolinha += velocidadeXBolinha

  yBolinha += velocidadeYBolinha
}


function verificaColisaoBorda() {
   if (xBolinha + raio > width ||
      xBolinha - raio < 0) {

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


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


  //seta pra cima
  function movimentaMinhaRaquete(){
     if (keyIsDown(UP_ARROW)) {
    yRaquete -= 10;
  }

  //seta pra baixo
      if (keyIsDown(DOWN_ARROW)) {
    yRaquete += 10;

  }
  }
}
1 resposta

Oi, Robson! Tudo bem?

Ao clicarmos na chave que inicia os comandos da função verificaColisaoBorda() podemos notar que a chave correspondente ao final dessa função é a última chave presente no código, logo, a função mostrarRaquete() não está sendo definida no escopo global do código, pois está dentro da função verificaColisaoBorda(), não podendo assim ser chamada dentro da função draw(), já que ela apenas poderá chamar funções declaradas no escopo global do código.

Para resolvermos esse problema, então, devemos excluir a última chave existente no código e adicionar uma chave "}" antes da função mostrarRaquete(). Dessa forma, estaremos fechando corretamente a função verificaColisaoBorda() e declarando as demais funções que vem após ela no escopo global do código.

Deixaremos, então, essa parte do código da seguinte forma:

function verificaColisaoBorda() {
   if (xBolinha + raio > width ||
      xBolinha - raio < 0) {

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


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


  //seta pra cima
  function movimentaMinhaRaquete(){
     if (keyIsDown(UP_ARROW)) {
    yRaquete -= 10;
  }

  //seta pra baixo
      if (keyIsDown(DOWN_ARROW)) {
    yRaquete += 10;

  }
  }

Além disso, precisamos fazer uma pequena alteração dentro da função draw(), que consiste em substituirmos o comando movimentarMinhaRaquete(); por movimentaMinhaRaquete();, visto que, é dessa maneira que a função está sendo nomeada no código. Deixaremos, então, a função da seguinte maneira:

function draw() {
  //fundo
  background(0);

  //Bolinha
  mostrarBolinha();
  movimentaBolinha();
  verificaColisaoBorda();

  //M Raquete
  mostrarRaquete();
  movimentaMinhaRaquete();

}

Espero ter ajudado! Qualquer dúvida se sinta à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓