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

Jogo não roda no Chrome

Prezados, bom dia!

Finalizei meu jogo, deu tudo certo.

Porém quando faço o download do P5, baixo para meu computador e tento rodá-lo no Chrome, aparece simplesmente a mensagem "Loading..." sem acontecer nada.

Uso o Mac, mas já testei no Chrome do Windows também e ocorre o mesmo problema.

o meu código é esse

//desenho da bolinha
let eixoX = 300;
let eixoY = 200;
let diametro = 20;
let raio = diametro / 2;

//velocidade da bolinha
let velocidadeEixoX = 8;
let velocidadeEixoY = 8;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

// variáveis da raquete do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velociddadeYOponente;

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

let colidiu = false;

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

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

}

function setup() {
  createCanvas(600, 400);
  trilha.loop();
}

function draw() {
  background(0);
  desenhaBolinha();
  movimentaBolinha();
  colisaoBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //verificaColisaoComRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  mostraPlacar();
  marcaPonto();

}

function desenhaBolinha() {
  circle(eixoX, eixoY, diametro);

}

function movimentaBolinha() {
  eixoX += velocidadeEixoX;
  eixoY += velocidadeEixoY;
}

function colisaoBolinha() {
  if (eixoX + raio > width || eixoX < 0) {
    velocidadeEixoX *= -1;

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

  }

}

function mostraRaquete(x, y) {
  rect(x, y, comprimentoRaquete, alturaRaquete);

}

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

function movimentaRaqueteOponente() {
  velocidadeYOponente = ((eixoY - 8) - yRaqueteOponente - 82) / 2;
  yRaqueteOponente += velocidadeYOponente;

}

function verificaColisaoComRaquete() {
  if (eixoX - raio < xRaquete + comprimentoRaquete &&
    eixoY - raio < yRaquete + alturaRaquete &&
    eixoY + raio > yRaquete) {
    velocidadeEixoX *= -1;
    raquetada.play();
  }
}

function verificaColisaoRaquete(x, y) {
  colidiu =
    collideRectCircle(x, y, comprimentoRaquete,
      alturaRaquete, eixoX, eixoY, raio);
  if (colidiu) {
    velocidadeEixoX *= -1;
    raquetada.play();
  }

}

function mostraPlacar() {
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill(color(255, 140, 0));
  rect(150, 10, 40, 20);
  fill(255);
  text(meusPontos, 170, 26);
  fill(color(255, 140, 0)); 
  rect(450, 10, 40, 20); 
  fill(255);
  text(pontosDoOponente, 470, 26);
}

function marcaPonto() {
  if (eixoX > 592) {
    meusPontos += 1;
    ponto.play();

  }
  if (eixoX < -1) {
    pontosDoOponente += 1;
    ponto.play();

  }
}
7 respostas

Futuquei bastante o código, li o console do Firefox e descobri que todas as linhas relacionadas ao som do jogo estão prejudicando-o ao tentar rodá-lo em um navegador ou servidor web.

Comentei as seguintes linhas no sketch.js para conseguir rodar o jogo:


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

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

function setup() {
  createCanvas(600, 400);
  //trilha.loop();      <------------------------------------------------------------
}

function verificaColisaoComRaquete() {
  if (eixoX - raio < xRaquete + comprimentoRaquete &&
    eixoY - raio < yRaquete + alturaRaquete &&
    eixoY + raio > yRaquete) {
    velocidadeEixoX *= -1;
    //raquetada.play();      <------------------------------------------------------------
  }
}

function verificaColisaoRaquete(x, y) {
  colidiu =
    collideRectCircle(x, y, comprimentoRaquete,
      alturaRaquete, eixoX, eixoY, raio);
  if (colidiu) {
    velocidadeEixoX *= -1;
    //raquetada.play();   <-----------------------------------------------------------
  }

}

function marcaPonto() {
  if (eixoX > 592) {
    meusPontos += 1;
    //ponto.play(); <--------------------------------------------------------------

  }
  if (eixoX < -1) {
    pontosDoOponente += 1;
    //ponto.play(); <-------------------------------------------------------------

  }
}

Obviamente ele rodou sem som.

Logo, considero que a forma de codificação de áudio que foi ensinada não foi a mais adequada, pois prejudica a exportação do game.

Ainda vou pesquisar mais sobre o assunto na documentação, em vídeos do Youtube e no Google em geral, mas qualquer ajuda aqui seria muito válida.

Obrigado.

Bom dia Daniel, não necessariamente a importação está errada mas talvez o formato do seu áudio. Existem diversas especificações de diferentes formatos de áudio quanto a bits, armazenamento, graves, agudos, espaços de tempo entre cada vibração, etc. Quando vc importa seu áudio, pode ser que ele tenha alguma dessas características que não concorde com o navegador. Fora que o código do p5 é feito para ser rodado no p5. Tente trocar os áudios ou até mesmo tentar no Edge, Google Chrome ou qualquer outro, acredito que em um desses dará certo ;)

  1. Não acredito que o problema é no formato do áudio. Não é que o jogo esteja rodando no silencioso. O que ocorre é que o jogo simplesmente não roda, fica travado no "Loading..." o tempo todo. Só rodou quando comentei as linhas referentes aos sons, foi isso que aconteceu.

  2. O formato do áudio está em MP3, que foi o fornecido pelo curso;

  3. Se o código do P5 só é feito para ser rodado no P5, qual é a vantagem de aprendê-lo então? Não concordo com essa afirmação. Acredito que ele é sim feito para ser exportado, porém está havendo um problema técnico, somente isso;

  4. Conforme eu disse no primeiro post, tentei rodar no Chrome e não foi. Também tentei no Firefox e num servidor web e ocorreu o mesmo problema.

  5. De qualquer forma, vou trocar os áudios e suas propriedades para ver se roda.

Bom Dia Daniel, irei responder suas perguntas:

1: Não sei se você viu, mas um tempos atrás uma imagem de fundo estava travando celulares Android, é a mesma coisa, o formato e características do áudio podem sim atrapalhar sua aplicação.

2: Não sou profissional da área de áudio, mas sei que existem outras características além de seu formato.

3: O p5 não tem nenhuma intenção de ser usado profissionalmente, ele é simplesmente uma plataforma para aprender lógica de programação com uma sintaxe simples do JS

4: Verifique se está rodando tudo certinho em seu lugar, pode ser algum problema aí.

5: Tente

Opa Daniel, tudo bem?

Determine os caminhos de arquivos de áudio e faça o teste. Quando você comentou e ele rodou, é por que não estava mais tendo problemas para resolver isso. Coloque os arquivos na pasta raiz do seu script, veja o caminho de cada arquivo .mp3 e utilize chamando no seu código que vai rodar sim =)

O P5 dispõe de um carregamento simples desses arquivos o que facilita o funcionamento.

Fico no aguardo!

Pessoal, evoluiu, mas ainda não rodou no Chrome. Mas deixa pra lá.

Mudei a extensão das músicas para .ogg e deu certo no Firefox e Safari. Porém ainda não roda no Chrome.

O link está aqui >> http://www.danielgomes.site/games/pong/

Mas pesquisando sobre softwares para criação de games, encontrei o Construct 3, que me parece ser uma boa solução. Ele é mais preparado para esta finalidade, é intuitivo e acredito que estes bugs simples não ocorrerão lá.

Fica aqui a sugestão de curso - Construct 3.

Abraço!

solução!

Olá Daniel, que bom que, pelo menos no Firefox e no Safari, seu jogo rodou! Se você tem do plano Premium Plus pra cima, vc teria acesso à Altura Start, e lá existem vários cursos de Construct 3! Caso você não tenha, te recomendo os cursos de Unity. O JavaScript, linguagem usada neste curso, não é feito para games, ou seja, se você quiser desenvolver profissionalmente em JS, você não terá muito material na internet ou no próprio JavaScript ensinando como fazer isso. Por isso, caso você queira continuar trabalhando com Games, a Game Engine Unity, que tem vários cursos aqui na plataforma Alura, pode te ajudar bastante. Ela é gravada em C# , uma linguagem muito simples mas muito poderosa da Microsoft. As suas vantagens são praticidade, pois você consegue arrumar iluminação, objetos 3D, posição no plano, além de poder testar e debugar seu jogo instantâneamente. Você não precisa se nenhum curso prévio de C#, pois a programação em Unity é extremamente simples.

Talvez você esteja se perguntando: "Mas que jogos de sucesso foram feitos nessa tal de Unity"

Bom, você irá se impressionar, jogos como Cuphead, Angry Birds, Plague Inc, Fallout Shelter, Human Fall Flat, Pokemon Go, entre outros. Caso queira, aqui está o link.

Bom, acredito que agora você tem um bom material para decidir seu caminho em sua carreira de desenvolvimento de Games, sucesso! =)

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