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

A lista das imagens dos carros não poderia ficar fora do preload?

A lista " imagemCarros = [imagemCarro, imagemCarro2, imagemCarro3];" não poderia ficar fora do preload? Em caso negativo, por que não? Em caso positivo, como ficaria o código?

function preload(){
  imagemDaEstrada = loadImage("imagens/estrada.png");
  imagemDoAtor = loadImage("imagens/ator-1.png");
  imagemCarro = loadImage("imagens/carro-1.png");
  imagemCarro2 = loadImage("imagens/carro-2.png");
  imagemCarro3 = loadImage("imagens/carro-3.png");
  imagemCarros = [imagemCarro, imagemCarro2, imagemCarro3];
}
3 respostas

Fala, Bruno! Tudo bem contigo?

Até poderia se a aplicação fosse fora do p5js. Como ele utiliza bibliotecas próprias, essa maneira é a utilizada para que possa haver um loading das imagens.

Nesse tutorial do próprio p5js vai explicar essa questão.

Eu acredito que tenha uma maneira de trabalharmos esse array fora do preloadmas teríamos que escrever mais linhas de código se quisermos fugir do loading que a plataforma nos oferece!

É isso Bruno!!!

Um abraço e bons estudos!!!

Olá, Cássio! Intendi teu ponto, mas, creio que eu não tenha sido muito claro na pergunta.

Eu até compreendo a necessidade de se utilizar o preload no p5js para carregar as imagens dos carros. O que não compreendo é o motivo da lista também precisar estar dentro da função.

No meu entendimento (que pode estar errado), a lista em si não está carregando nenhuma imagem, ela apenas faz referências às imagens que já foram previamente chamadas. Sendo assim, por que o código abaixo não funciona?

function preload(){
  imagemDaEstrada = loadImage("imagens/estrada.png");
  imagemDoAtor = loadImage("imagens/ator-1.png");
  imagemCarro = loadImage("imagens/carro-1.png");
  imagemCarro2 = loadImage("imagens/carro-2.png");
  imagemCarro3 = loadImage("imagens/carro-3.png");
}

let imagemCarros = [imagemCarro, imagemCarro2, imagemCarro3];
solução!

Fala, Bruno! Tudo bem contigo?

Se fizermos dessa forma ele vai gerar o seguinte o erro

> p5.js says: image() was expecting p5.Image|p5.Element for parameter #0 (zero-based index), received an empty variable instead. If not intentional, this is often a problem with scope: [https://p5js.org/examples/data-variable-scope.html] at about:srcdoc:171:5. [http://p5js.org/reference/#p5/image] 

por justamente trabalhar essas imagens "ativas" no preload.

Até mesmo se colocarmos essa arraydentro da pasta carros também vai gerar o erro!

Agora dentro dessa pasta carros existem, dentro das funções, invocações dessa array.

Como o p5jspossui o preload para carregar essas imagens, e inclusive os sons, creio que a biblioteca "obriga" ter esse carregamento de tudo que vai no game dentro do preload.

Entendo seu questionamento, até mesmo para chamar essa arraydentro da pasta carros, mas essa regra do p5jscom as imagens e tudo que vem de arquivos externos, faz com que colocamos dentro do preloadpara que haja uma constante, como um looping.

Espero ter ajudado com algo, Bruno!

Um abraço!