Oi oi, Camila! Tudo bem com você?
Em primeiro lugar, parabéns pela autonomia na resolução de problemas, essa característica é fundamental para o seu aprendizado. Em segundo, obrigada mais ainda por compartilhar sua solução conosco! :)
É realmente muito comum que às vezes a gente faça a chamada da função em um lugar errado e isso quebre o jogo ou aplicação e é extremamente importante que você tenha conseguido observar esse ponto e identificar o que ocorreu no código. No caso do P5, o interpretador apresenta uma estrutura de comportamento e possui algumas funcionalidades "pré prontas" que nos ajudam na construção dos jogos ou animações.
O função preload(), por exemplo, funciona com o carregamento de imagens externas. Nesse sentido,da forma que o instrutor construiu o código, 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(). Para mais informações, você pode conferir a documentação oficial do p5 Preload().
Continue compartilhando seu processo e também as soluções que encontrar!
Um grande abraço e bons estudos!!