Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

[Dúvida] P5.JS Jogo Pong: function verificarColisaoRaqueteBolinha

Boa tarde,

Estou tentando otimizar o código do jogo Pong no p5.js porém não estou conseguindo.

Tudo acontece na function para verificar se a bolinha está batendo na raquete.

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

Quando tento otimizar esta operação para uma variável, isto não funciona.

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

Por que isto não funciona quando otimizo para essa variável esquerdaBolinha

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

6 respostas

Olá...

Fiz o teste parcial aqui e funcionou.

//variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 13;
let raio = diametro / 2;
let esquerdaBolinha = xBolinha - raio;
function verificaColisaoRaquete(){
  if (esquerdaBolinha < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

O ideal era você compartilhar o link do seu programa para fazer uma analize mais completa para ver o que tem de errado.

Olá Rodrigo, Agradeço o retorno!

Estou compartilhando o código para você dar uma olhada: https://editor.p5js.org/novaes1998/sketches/wkX6aQlro

A ideia é otimizar o código com essas variáveis: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi, Lucas

Isso não funciona!

Esses valores não se alteram

"esquerdaBolinlha" sempre vai ser 290;

solução!

Tudo bem Lucas?

Realmente o Luis Dias tem razao, nao vai funcionar.Quando aperta play a variavel esquerdaBolinha já vai receber o valor de 290 e não sera alterado. Isso ocorre porque na primeira vez que o codigo é executado quando da play todas as variaveis receberão um valor. Da segunda vez em diante o progama nao lê mais os valores das variaveis novamente, pois vai começar a ler somente dentro da function draw() enquanto o jogo continuar rodando.

Para que ocorra a alteraçao do valor da variavel esquerdaBolinha , tem que quer declarada dentro da propria função verificarColisaoRaqueteBolinha();

Para conseguir entender um pouco melhor, tem o codigo abaixo. Nas linhas que tem o // de comentario, voce descomenta uma linha e executa. Que seras mostrado os valores no console. Depois comenta e descomenta a proxima linha. Executa e tu vera que o valor de esquerda bolinha nao muda.

function verificarColisaoRaqueteBolinha(){
  //console.log(xBolinha , xRaquete)
  //console.log(esquerdaBolinha)
  //console.log(esquerdaBolinha=xBolinha - raioBolinha)
  
  //let esquerdaBolinha = xBolinha - raioBolinha;
  //let direitaRaquete = xRaquete + larguraRaquete
  
  if (esquerdaBolinha < direitaRaquete){
    
    velocidadeXBolinha *= -1;
    
  }

Estou com o mesmo problema, mas aí não é possível usar em outras funções? Porque aí não faz sentido essa otimização visto que vou ter que colocar em mais de uma função as variáveis

let direitaBolinha = xBolinha + raio;
let esquerdaBolinha = xBolinha - raio;
let superiorBolinha = yBolinha - raio;
let inferiorBolinha = yBolinha + raio;
function verificaColisaoBorda()
{  
  let direitaBolinha = xBolinha + raio;
  let esquerdaBolinha = xBolinha - raio;
  let superiorBolinha = yBolinha - raio;
  let inferiorBolinha = yBolinha + raio;
  if (direitaBolinha > width || esquerdaBolinha < 0)
  {
    velocidadeXBolinha *= -1;
  }
  if (inferiorBolinha > height || superiorBolinha < 0)
  {
    velocidadeYBolinha *= -1;
  }
}
function verificaColissaoRaquete()
{
  let direitaBolinha = xBolinha + raio;
  let esquerdaBolinha = xBolinha - raio;
  let superiorBolinha = yBolinha - raio;
  let inferiorBolinha = yBolinha + raio;
  if (esquerdaBolinha < direitaRaquete  && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete) 
  {
    velocidadeXBolinha *= -1;
  }
}

Não, realmente não tem como usar fora da funçao, pois seria uma variavel local, diferente das outras bem no inicio do codigo, elas são variaveis globais, pois podem ser usada dentro de qualquer função que precisar. Sim, realmente não vale a pena essa otimizaç