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

[Sugestão] Colisão com carros sem usar biblioteca

Oi pessoal!

Procurei aqui pra ver se alguém fez sem usar a biblioteca e segui algumas dicas de um dos alunos, o meu código ficou bem semelhante e funcionou mesmo estando um pouco diferente.

function verificaColisaoDoAtorCarros() {
  for (i = 0; i < imagemCarros.length; i += 1) {

    if (yAtor < yCarros[i] + alturaCarro && 
      xAtor + larguraAtor > xCarros[i] &&
      xAtor < xCarros[i] + alturaCarro &&
      yAtor + alturaAtor > yCarros[i]) {

    yAtor = 365;

    }
  }
}

Explicação:

Bem parecido como método do jogo de Pong, crei um if para verificar a posição do ator em X e Y é maior ou menor que a do carro.

Pra "cabeça" do ator bater em baixo do carro: o eixo x, y = (0, 0) tanto do ator quanto do carro ficam no canto superior esquerdo, portanto, sei que pra parte de cima do ator só bastaria usar sua posição y (o yAtor) e pra identificar a parte de baixo do carro, precisei somar o yCarro + alturaCarro, então a comparação yAtor < yCarro + alturaCarro.

Pra lateral direita do ator bater do lado esquerdo do carro: aqui na mesma lógica, pra obter a "largura total" do ator tive que somar o xAtor + larguraAtor, e a comparação com o lado esquerdo do carro (x), ficando xAtor + larguraAtor > xCarro.

A partir daí segui a lógica para os demais lados do carro, adicionei as variáveis para identificar o índice de cada carro com o loop for (i = 0; i < imagemCarros.length; i += 1) pra que o código repita para cada carro existente.

4 respostas
solução!

Olá Ana, tudo ok por ai?

Gostaria de agradecer pela paciência em obter um retorno aqui no fórum!

Sobre a solução que você postou aqui, eu gostaria de lhe dar os parabéns, pois sua solução ficou incrível, dado que você conseguiu usar a lógica de programação que foi ensina até o presente momento, visto que você aplicou de laços e listas perfeitamente bem para fazer essa parte do projeto.

Recomendo, caso se sinta confortável em compartilhar seu conhecimento, interagir com outros estudantes, trocar experiências e fazer networking, que participe do Discord oficial da Alura de alunas e alunos:

Caso tenha dúvidas, estarei à disposição para te ajudar!

Grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solução! ✓.

Ana, muito obrigada pela gentileza <3 tava morrendo de preguiça de fazer esse código porque fiquei estressada com o da biblioteca não ter funcionado <3

ola Ana Luiza Mendes Ajude-me por favor !! como voce conseguiu criar o codigo para retornar o Ator a posição inicial ? após marcar o ponto ou seja chegou no final como retornar para o inicio ? Grato

Oi Fabio! Para voltar o ator a posição inicial depois de marcar o ponto fiz o seguinte:

function marcarPontos() {
  if (yAtor < 10 ) {
    meusPontos += 1;
    somDoPonto.play();
    voltaAtorPosicaoInicial();
  }
}

Se ele ultrapassar 10 no eixo Y, volta pra posição inicial, que seria 365 (coloquei dentro da função)