1
resposta

Jogo trava quando chego no outro lado da rua.

São duas questões:

Aprimeira é de que meu jogo trava quando eu levo meu ator até o outro lado da rua.

Outro problema é que esta detectando colisão no ator muito antes. nao sei onde posso estar alterando.

Link do projeto: https://editor.p5js.org/patrickfreiree/sketches/Y0H3jC8Dr

1 resposta

Olá, Lucas! Como você está, tudo bem?

Verifiquei seu código e antes de tudo eu gostaria de parabenizá-lo pela linda customização!

Eu amei o cachorrinho hahaha!

Também percebi que você aplicou a lógica para outros atores, essa postura pela busca de implementação de novos elementos é bastante importante e irá ajudar muito no seu crescimento na área do desenvolvimento, parabéns!

Sobre o problema que você descreveu, testei seu código e o ator funcionou corretamente. O jogo rodou limpo e o ator não travou ao chegar até o outro lado da rua. Você poderia confirmar se o problema continua?

Já no momento da colisão, percebi que a sensibilidade em relação a moto estava muito acentuada e segui alguns passos:

  • Baixei seu projeto e olhei o tamanho da imagem e parecia tudo certo;

  • Voltei para o código e o console mostrava o seguinte erro:

    p5.js says: image() was expecting Number for the fifth parameter, received array instead. (on line 250 in about:srcdoc [about:srcdoc:250:5]). (http://p5js.org/reference/#/p5/image)

    Esse erro informa que a função image() espera receber um dado do tipo Número mas recebe um array/lista no lugar. Essa função é utilizada no código para mostrar os sprites/atores na tela, vamos ver no código..


  function mostraCarro() {
  for (let i = 0; i < imagemCarros.length; i = i + 1) {
    image( //aqui a função image()
      imagemCarros[i],
      xCarros[i],
      yCarros[i],
      comprimentoCarros,
      alturaCarros
    );
  }

  • A lógica está correta no seu código. Dessa forma, verifiquei os valores nas variáveis e percebi que você estava passando um array/lista no lugar do valor da altura e comprimento. Vamos no código:
//código do carro e moto
let yCarros = [40, 90, 140, 260];
let xCarros = [600, 600, 600, 600];
let velocidadeCarros = [4, 3, 1.6, 3.6];
let comprimentoCarros = 50; //altura e comprimento estavam como array
let alturaCarros = 40; //altura e comprimento estavam como array

let yMotos = [300, 310, 100];
let xMotos = [600, 600, 600];
let velocidadeMotos = [3, 4, 6]; 
let comprimentoMotos = 40; //altura e comprimento estavam como array
let alturaMotos = 40; // altura e comprimento estavam como array e diminui o valor da altura

No seu código, as variáveis estavam entre colchetes "[ ] ", o que significa que aquela informação ali dentro é um array/lista. Alterei a informação para o dado do tipo Número (tirei os colchetes) e fiz outra alteração para reduzir a sensibilidade do ator, que foi diminuir o valor da altura (essa modificação diminui o tamanho que o ator ocupa na tela, e diminui a sensibilidade de colisao).

Essas modificações conseguiram fazer com que seu ator marcasse o ponto apenas ao chegar bem perto da moto e agora ele não marca os pontos quando está distante. Você poderia testar as modificações no seu projeto?

Espero que tenha conseguido te ajudar!

Parabéns novamente pelo projeto e estou à disposição para ajudá-lo!

Um abraço e bons estudos!!