o link do código: https://editor.p5js.org/Jose511/sketches/5J35B90gX
Olá, Nícolas, tudo bem?
O problema da movimentação está na função acertou
.
Note que essa função posiciona nosso jogador exatamente em um X e um Y fixos na tela, portanto ela só deve ser chamada quando algo específico acontecer (como por exemplo, a colisão).
Mas você está chamando ela também na função draw
que é repetida várias vezes por segundo. Assim, não importa que a gente clique os botões para mover o jogador, ele vai sempre voltar para aqueles X e Y fixos na tela.
A solução seria remover a função acertou
de dentro da função draw
e chamá-la somente quando realmente ocorrer uma colisão.
function draw() {
background(imagemDoCell);
mostraPassaro();
mostraPedra();
movimentaPedra();
movimentaPassaro();
voltaposisao();
//voltaposisaoPas();
passouTodaATela();
pedradaSky();
//acertou();
}
(No exemplo acima comentei a linha apenas para você ver o que mudou, mas no seu código você pode removê-la!)
Também pude notar que há alguns um erro de digitação no seu código de colisão (a função pedradaSky
dentro do arquivo passaro.js
)
No collideRectCircle
você chama duas vezes o vetor yPedras
sendo que no primeiro argumento você deve chamar o vetor xPedras
.
function pedradaSky(){
for (let i = 0 ; i < imagensPedras.length; i = i + 1){
colisao = collideRectCircle(
xPedras[i], yPedras[i],
comprimentoPedra,alturaPedra,
xPassaro,yPassaro,
20);
if (colisao){
acertou();
}
}
}
Quebrei a linha na própria chamada do collideRectCircle
para ficar mais fácil de ver.
Com essas duas alterações seu código funcionará bem! Tanto para mover o jogador, quanto para efetuar as colisões!
Espero ter ajudado!
Reforço que estou à disposição para tirar dúvidas.