5
respostas

P5 travando

Pessoal, estou com um problema no meu projeto que ainda não foi solucionado. Comentei há um mês e não obtive respostas. O meu projeto simplesmente não para de travar. Eu fiz tudo corretamente, todos os códigos e números foram devidamente colocados, mas toda vez que eu inicio o jogo começa a engasgar ao ponto de parar completamente. O código do p5.collide2d.js e os arquivos contendo os sons do jogo também foram adicionados corretamente.

Meu código é o seguinte:

//variáveis da bolinha
let xBolinha = 300
let yBolinha = 200
let diametro = 25
let raio = diametro / 2

//velocidade da bolinha
let velocidadeXBolinha = 2
let velocidadeYBolinha = 2

//variáveis da Raquete
let xRaquete = 10
let yRaquete = 150
let raqueteComprimento = 10
let raqueteAltura = 90

//variáveis da raquete do oponente
let xRaqueteOponente = 580
let yRaqueteOponente = 150
let velocidadeYOponente;

//placar do jogo 
let meusPontos = 0;
let pontosDoOponente = 0;

//sons do jogo
let raquetada;
let ponto;
let trilha;

let colidiu = false;

function preload(){
  raquetada = loadSound("raquetada.mp3")
  ponto = loadSound("ponto.mp3")
  trilha = loadSound("trilha.mp3")
}

//mapa do jogo
function setup() {
  createCanvas(600, 400);
  trilha.loop();
}

function draw() {
  background(0);
  mostraBolinha();
  velocidadeBolinha();
  verificaColisaoBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaRaquete();
//verificaColisaoRaquete();
  colisaoRaqueteBolinha(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
//movimentaRaqueteOponente();
  colisaoRaqueteBolinha(xRaqueteOponente, yRaqueteOponente);
  mostraPlacar();
  marcaPonto();
  preload();
}

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

 }

function velocidadeBolinha(){
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

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

function mostraRaquete(x, y){
   rect (x, y, raqueteComprimento, raqueteAltura)
}

function movimentaRaquete(){
  if (keyIsDown (UP_ARROW)){
    yRaquete -= 10
  }
  if (keyIsDown (DOWN_ARROW)){
    yRaquete += 10
  }
  yRaquete = constrain (yRaquete, 10, 300)
}

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

function colisaoRaqueteBolinha(x, y){
 colidiu =
  collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, diametro)
  if (colidiu){
     velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteAltura/2;
  yRaqueteOponente += velocidadeYOponente;
  
  yRaqueteOponente = constrain (yRaqueteOponente, 10, 300);
}

function mostraPlacar(){
  stroke(255)
  textAlign (CENTER);
  textSize (14)
  fill (0, 0, 205)
  rect (230, 10, 40, 20)
  fill (255)
  text (meusPontos, 250, 25)
  fill (0, 0, 205)
  rect (330, 10, 40, 20);
  fill (255)
  text (pontosDoOponente, 350, 25)
}

function marcaPonto(){
  if (xBolinha - raio < 0){
  pontosDoOponente += 1;
  ponto.play();
  }
  if (xBolinha + raio > width){
  meusPontos += 1;
  ponto.play();
  }
}

Se alguém puder me dar uma luz eu agradeço!

5 respostas

Pessoal, acabei de remover os sons do jogo e o travamento parou. Nesse caso o problema estaria nos arquivos de áudio disponibilizados pelo professor?

Olá, Luiz, tudo bem?

É possível que durante o processo de download, o arquivo tenha sido corrompido. Para resolver essa questão, gostaria de sugerir o seguinte procedimento: por favor, exclua os arquivos relacionados ao som e tente efetuar o download novamente para depois integrá-los ao código.

Entretanto, caso o problema persista mesmo após seguir essas instruções, solicito que gentilmente me encaminhe o link do projeto. Isso me permitirá identificar a origem do erro de forma mais precisa e oferecer uma assistência mais eficaz.

Para compartilhar o projeto no P5, siga os passos abaixo:

  • Com o p5 aberto e já logado, clique em File (arquivo)
  • Logo depois em Share(compartilhar)
  • Por fim, copie o terceiro link do "edit".
  • Cole o link na resposta do fórum

Sequências de imagens em formato gif, demonstram o passo a passo de como compartilhar o código pelo p5.js Se precisar de ajuda ou tiver alguma dúvida, estou à disposição, conte comigo!

Abraços e bons estudos.

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

Bom dia Monalisa! Tentei remover os arquivos e baixá-los novamente, mas o problema continuou :(. Segue o link do projeto: https://editor.p5js.org/LuizzDev/sketches/EMc93zN1V.

Desde já agradeço pela ajuda!

Monalisa, eu finalmente encontrei uma forma de corrigir isso, embora eu não tenha entendido completamente o porquê kkkkk. Resolvi comentar o "preload" do meu "function draw" pra testar uma outra função e os travamentos acabaram cessando. Nesse caso eu não precisaria atribuir o carregamento dos sons às demais funções?

Oi Luiz, tudo certinho?

A função preload não deverá ser chamado na função draw. A função preload no p5.js é usada para carregar recursos, como imagens, sons ou arquivos de dados, antes que o restante do código no sketch seja executado. Já a função draw() no p5 é responsável por desenhar elementos na tela.

Portanto, reforço que são funções com finalidades diferentes, a preload() é uma função nativa e deve ser chamada fora da função draw().

Caso surja alguma dúvida, fico à disposição.

Abraços e até mais!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software