Boa tarde Luidi.
Referente a função preload(), ela funciona com o carregamento de imagens externas. De acordo com a documentação de referência do p5.js , a preload() carrega imagens de forma assíncrona. Isso significa que nós precisamos chamar a preload() antes da setup(). Só depois disso que a setup() irá esperar a chamada da imagem que foi carregada no preload().
Referente a não utilização da palavra let, você tem que declarar essas variáveis fora do escopo da função, para que as imagens possam ser acessadas por todo o código. Tipo assim:
let imagemDaEstrada;
let imagemDoAtor;
let imagemCarro;
let imagemCarro2;
let imagemCarro3;
let imagemCarros;
let somDaTrilha;
let somDaColisao;
let somDoPonto;
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, imagemCarro, imagemCarro2, imagemCarro3];
somDaTrilha = loadSound("sons/trilha.mp3");
somDaColisao = loadSound("sons/colidiu.mp3");
somDoPonto = loadSound("sons/pontos.wav");
}
Você pode dar até uma olhada na referência da função preload(), acho que vai ficar mais claro, tem um exemplo bem simples lá.
Espero ter ajudado.
Bons estudos.