Quero deixar o jogo um pouco mais difícil. Ao invés de 3 faixas esquerda/direita, gostaria de fazer variando entre elas
Ex: Faixa 1,3,5 - movimentação a partir da Esquerda
Faixa 2,4,6 - movimentação a partir da Direita
É possivel?
Quero deixar o jogo um pouco mais difícil. Ao invés de 3 faixas esquerda/direita, gostaria de fazer variando entre elas
Ex: Faixa 1,3,5 - movimentação a partir da Esquerda
Faixa 2,4,6 - movimentação a partir da Direita
É possivel?
Fala, Eder! Tudo bem contigo?
É uma boa ideia, hein!!!
Dê uma olhada no projeto de um de nossos alunos, José Luiz, que desenvolveu carros trafegando em sentidos contrários!
Acredito que vai te ajudar a desenvolver o seu projeto!
Um abraço e bons estudos, Eder!
Opa Eder, tudo bem com você?
É totalmente possível, a única coisa que é necessário adicionar imagens diferentes em nosso array:
imagemCarros = [imagemCarro, imagemCarro2, imagemCarro3, imagemCarro4, imagemCarro5, imagemCarro6]
Aqui de preferência seria legal que as imagens fossem giradas para trazer um melhor efeito de movimento :)
Após isso só precisamos mudar em 2 lugares:
1. Posições
Dado que alguns vão se movimentar com a outra faixa, então precisamos que a posição também seja invertida:
let xCarros = [0, 600, 0, 600, 0, 600];
Então a lógica vai ser o seguinte, os carrinhos pares vão de 0 a 600, e os impares vão de 600 a 0 :)
mas como calcular os pares e impares?
Nas linguagens de programação temos o operador de modulo (%)
, que nada mais é do que o resto da divisão inteira, então por exemplo:
Então como podemos ver, todo número par, quando fazemos o módulo por 2 tem resultado igual a 0 :)
onde vamos usar isso ?
Bem na função movimentaCarro
podemos adicionar essa verificação :
function movimentaCarro(){
for( let i = 0; i < imagemCarros.length; i++){
if( i % 2 == 0){
xCarros[i] += velocidadeCarros[i];
} else {
xCarros[i] -= velocidadeCarros[i];
}
}
}
Ou seja, se o índice for par, vamos aumentar a posição dele, se for ímpar continuamos diminuindo :)
Dessa maneira precisamos mudar também a função que calcula se passou a tela
function passouTodaATela(xCarro){
return xCarro < - 50 || xCarro > 600;
}
Ou seja, adicionamos com o || (ou) mais uma condição que é passar de 600, dessa forma teremos verdadeiro nos 2 casos
E por fim, a função de voltar a posição inicial:
function voltaPosicaoInicialDoCarro(){
for (let i = 0; i < imagemCarros.length; i++){
if (passouTodaATela(xCarros[i])){
if ( i % 2 == 0){
xCarros[i] = 0;
}else {
xCarros[i] = 600;
}
}
}
}
Novamente utilizei a questão do módulo, para caso seja par colocar na posição 0, e impar continua igual começando em 600 :)
Dessa forma teremos os carrinhos se movimentando diferente!!!
Abraços e Bons Estudos :)
Obrigado Cassio e Geovani
A ideia partiu do projeto do José, então eu já havia visto e aplicado ao meu código.
A solução do Geovani ajudou bastante (Inclusive até anotei a parte sobre % para dar uma estudada melhor)
Vou aplicar e configurar certinho e abro um tópico para todo mundo ver depois Muito obrigado pela ajuda!