Analisando o jogo vi que se eu deixasse o ator um pouco acima do carro, esse ultimo passava por dentro da imagem do primeiro. Acho que a forma de solucionar seria pelo fato de que é uma colisão entre retângulos, tanto que colocamos a largura e altura na hora de inserirmos a imagem do ator.
Esta certo dessa forma?
//codigo do ator
//variaveis do ator
let xAtor = 300;
let yAtor = 367;
let larguraAtor = 30;
let alturaAtor = 30;
let velocidadeDoAtor = 3;
let colisao = false;
let meusPontos = 0;
function mostraAtor() {
image (imagemDoAtor, xAtor, yAtor, larguraAtor, alturaAtor);
}
function movimentaAtor() {
if (keyIsDown(UP_ARROW)) {
yAtor -= velocidadeDoAtor;
}
if (keyIsDown(DOWN_ARROW) && podeSeMoverBaixo()) {
yAtor += velocidadeDoAtor;
}
if (keyIsDown(LEFT_ARROW) && podeSeMoverEsquerda()) {
xAtor -= velocidadeDoAtor;
}
if (keyIsDown(RIGHT_ARROW) && podeSeMoverDireita()) {
xAtor += velocidadeDoAtor;
}
}
function podeSeMoverBaixo () {
return yAtor < 370 ;
}
function podeSeMoverEsquerda () {
return xAtor > 0;
}
function podeSeMoverDireita () {
return xAtor + larguraAtor < 600
}
function verificaColisao () {
for (let i = 0; i < imagemCarros.length; i++) {
colisao = collideRectRect(xCarros[i], yCarros[i], tamanhoXCarro,tamanhoYCarro, xAtor, yAtor, larguraAtor, alturaAtor);
if (colisao) {
colidiu();
somColidiu.play();
}
}
}
function colidiu () {
perdePonto();
voltaAtorPosicaoInicial()
}
function perdePonto () {
if (meusPontos > 0) {
meusPontos -= 1;
}
}
function marcaPonto () {
if (yAtor < 0) {
voltaAtorPosicaoInicial();
meusPontos++;
somPontos.play();
}
}
function voltaAtorPosicaoInicial() {
xAtor = 300;
yAtor = 367;
}
Aproveitando, também adicionei movimentações para os lados e funções para conferir os limites de movimentos nesses sentidos.