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

[Bug] Depois de criar a função 'colidiu()', o ator passa a se movimentar apenas no eixo X

Olá!

O jogo estava funcionando perfeitamente bem, até eu criar a função colidiu(); e inseri-la dentro da função verificaColisao(). Quando faço isso e dou play no jogo, o ator passa a se movimentar apenas na horizontal (Eixo X).

Ao desativar a função colidiu(); e retornar o valor yAtor = 366 para dentro da função verificaColisao(), o jogo passa a voltar a funcionar normalmente.

Imaginei que poderia ser um bug, então testei em dois navegadores diferentes: Safari e Chrome. Em ambos o problema persiste.

Segue código para análise.

let xAtor = 100;
let yAtor = 366;
let colisao = false;


function mostraAtor (){
  image(imagemDoAtor, xAtor, yAtor,30, 30)
}

function movimentaAtor (){
  if (keyIsDown(UP_ARROW)){
    yAtor = yAtor - 3
  }
   if (keyIsDown(DOWN_ARROW)){
    yAtor = yAtor + 3
  }
     if (keyIsDown(LEFT_ARROW)){
    xAtor = xAtor - 3
  }
       if (keyIsDown(RIGHT_ARROW)){
    xAtor = xAtor + 3
  }
}


function verificaColisao(){
  for (let i = 0; i < imagemCarros.length; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], larCarros, altCarros, xAtor, yAtor, 15)
    if (colisao){
      colidiu();
    }
  }
}

function colidiu(){
  yAtor = 366;
}

Obs: a função foi incluída dentro da função draw, no arquivo sketch.js

Obrigado!

7 respostas

Oi, Igor. Beleza?

Fiz a implementação das suas funções no meu código e funcionou normalmente. O ator se movimentou para todos os lados. Quando você executa, retorna alguma mensagem de erro?

Oi Douglas, tudo bem?

Nenhuma mensagem de erro. O jogo inicia normalmente, mas só consigo mexer o ator na horizontal

Consegue me mandar seu código todo? Compartilha aqui o link do p5.js

Claro! Segue link: https://editor.p5js.org/igorbdm/sketches/GBYTSas71

solução!

Perfeito. Achei o "erro". Você chamou a função colidiu dentro do sketch. Sendo assim, o ator vai sempre estar em na posição 366 do eixo Y.

Foi só eu comentar que seu código funcionou.

A função colidiu, ela foi feita para resetar a posição do ator no eixo Y, sendo assim, ela só tem que ser chamada dentro da função de colisão. Toda vez que houver uma colisão, o ator volta pra posição 366 no eixo Y.

Consegui explicar? Qualquer coisa só falar. Abraços.

Ahhhhh! Entendi! Eu achava que todas as funções criadas precisavam ser colocadas dentro da função draw para que elas fossem reconhecidas como uma função dentro do código hahahahha

Foi uma interpretação errada minha que veio lá do primeiro curso de JS, de criar o jogo Pong.

Muito obrigado pela ajuda! Eu já tava ficando maluco com isso hahahaha

Rsrs. Isso acontece com qualquer um nesse mundo de dev. Sempre que tiver dúvidas, só compartilhar no fórum.

Abraços.