Não estou achando o erro me ajudem ai https://editor.p5js.org/Luylton_Santos/sketches/zampyc_iG
Oi Luylton, tudo bem?
Obrigado pela paciência em aguardar uma resposta!
Analisei seu jogo gostaria de comentar alguns pontos a respeito do seu código:
Percebi que você conseguiu solucionar o problema com o loop dos carros.
Deixo aqui a sequência de comandos necessários para que os carros passem pela estrada continuamente:
function voltaPosicaoInicialDoCarro(){
for( let i = 0; i<imagemCarros.length; i++){
if (passouTodaTela(xCarros[i])){
xCarros[i] = 600;
}
}
}
function passouTodaTela(xCarros){
return xCarros <-50;
}
Ao jogar seu jogo percebi que os pontos não eram marcados assim que a vaquinha atravessava a rua. Isso acontece por conta do código escrito na função verificacolisao()
:
function verificacolisao(){
for (let i = 0; i < imagemcarros.length; i++){
colisao = collideRectCircle(xcarro [i], ycarros[i], comprimentocarro, alturacarro, xator, yator, 15)
if (colisao) voltaatorparaposicaoinicial()
if (pontosmaiorquezero()){
meuspontos -= 1;
}
}
}
É possível notar que quando você escreve a condição if(colisao)
você não abre chaves para incorporar as outras propriedades atreladas a colisão da personagem com os carros. Dessa forma, a condição subsequente if(pontosmaiorquezero())
é acionada sem que haja colisão, ou seja, sempre que os pontos forem maior que zero será subtraído um ponto do seu placar.
Uma solução para este problema seria escrever os comandos da seguinte maneira:
function verificacolisao(){
for (let i = 0; i < imagemcarros.length; i++){
colisao = collideRectCircle(xcarro [i], ycarros[i], comprimentocarro, alturacarro, xator, yator, 15)
if (colisao){
voltaatorparaposicaoinicial();
if (pontosmaiorquezero()){
meuspontos -= 1;
}
}
}
}
Agora tanto a função voltaatorparaposicaoinicial()
quanto a condição if(pontosmaiorquezero())
pertencem a condição if(colisao)
, fazendo com que apenas se houver colisão sejam descontados pontos do placar.
Percebi também que você escreveu todos os comandos dentro do arquivo sketch.js
, não há problema em fazer todo seu projeto em um mesmo local, mas é recomendável que você faça uma divisão, separando os códigos referentes a cada parte do jogo, da mesma forma que o instrutor fez durante o curso. Desta forma o projeto fica mais organizado e facilita a identificação de erros.
Um terceiro ponto que gostaria de comentar é a importância das boas práticas em relação a escrita dos comandos. É importante, ao escrever o nome de uma variável ou de uma função, que a primeira palavra tenha letras minúsculas e que a inicial das demais palavras que podem vir a ser utilizadas, tenham a letra maiúscula. Também é interessante ao final da escrita dos comandos, colocar um ponto e vírgula (;) para evitar complicações com códigos mais complexos. Além disso, é essencial manter uma boa indentação para que a hierarquia dos comandos seja respeitada e para proporcionar uma leitura direcionada e facilitada.
Notei também que você não incluiu os sons ao ponto, colisão e trilha sonora. Caso queira adicionar esses efeitos ao seu jogo basta seguir o seguintes passos:
Inicialmente você precisa fazer upload dos arquivos de som da mesma maneira que você fez com as imagens.
Na sequência, você deve criar uma variável para cada som:
let somTrilha;
let somColisao;
let somPonto
Em seguida você irá carregar as imagens através da propriedade loadSound()
dentro da função preload()
:
somTrilha = loadSound("sons/trilha.mp3");
somColisao = loadSound("sons/colidiu.mp3");
somPonto = loadSound("sons/pontos.wav");
Depois, você adicionará a função setup()
o seguinte comando referente a trilha sonora:
somTrilha.loop();
Na condição if(colisao)
, você atribuirá dentro da função verificaColisão()
o seguinte comando:
somColisao.play();
Na condição if (yAtor <15)
dentro da função marcaPonto()
você adicionará o seguinte comando:
somPonto.play();
Outras adições que podem ser feitas são os movimentos laterais que seguem a mesma lógica apresentada para os movimentos para cima e para baixo:
if(keyIsDown (RIGHT_ARROW)){
xAtor +=2;
}
if(keyIsDown (LEFT_ARROW)){
xAtor -=2;
}
Este código apresentado acima deve ser inserido na função movimentaAtor()
e proporciona maior mobilidade ao personagem.
Caso tenha outras dúvidas durante sua jornada, estarei à disposição para te ajudar.
Grande abraço e bons estudos.