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

[Dúvida] Gostaria de criar uma velocidade aleatória sempre que tocar no final

Gostaria de saber como eu adiciono uma velocidade aletória no carrinho sempre que ele chega no final para deixar o jogo mais legal de se jogar. Tentei colocar uma função para gerar o número aletório, mas ele não entende fica gerando toda hora e o carrinho não tem uma velocidade fixa e não aprece na tela.

segue o projeto: https://editor.p5js.org/nataniellima27/sketches/YvEa3G600

3 respostas
solução!

Oiii Cicero, como você está?

Seu jogo está ficando muito legal! Fugir dos boletos dá uma motivação a mais, né?

Para atribuir velocidades aleatórias a cada vez que os objetos voltarem a aparecer na tela, adicione esse trecho na pasta carros.js:

function velocidadeAleatoria() {
  return Math.random() * (9 - 2) + 2;
}

function alteraVelocidades(){
  for (let i = 0; i < imagemCarros.length; i++){
    velocidadeCarro[i] = velocidadeAleatoria();
    velocidadeCarroInverso[i] = velocidadeAleatoria();
  }
}

E chame a função alteraVelocidade() dentro de voltaPosicaoInicialCarro(), assim:

function voltaPosicaoInicialCarro(){
  for(let i=0;i<imagemCarros.length;i++){
     if(passouTodaATela(xCarro[i])){
        xCarro[i]=600;
    }
  }
    for(let i=0;i<imagemCarrosInvertido.length;i++){
      if(passouTodaATelaInverso(xCarroInverso[i])){
        xCarroInverso[i]=-50;
    }
  }
     alteraVelocidades();
    //console.log(velocidadeCarro)
}

Agora, a cada vez que os atores passarem a tela, a velocidade vai se alterar.

Deixei o console.log comentado. Caso queira ver as velocidades, é só retirar as duas barras do começo da linha e executar.

Vou deixar aqui a documentação de Math.random, caso você queira entender melhor sobre essa função.

O artigo está em inglês. Se esse idioma não for confortável para você, é possível usar o tradutor do próprio navegador, clicando em qualquer lugar da tela com o botão esquerdo do mouse e escolhendo a opção traduzir para o português.

Estou a disposição!

Forte abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá Larrisa, tudo na paz? Que explicação maravilhosa, desenrolada toda você!!!!!!! me ajudou bastante. Fiz o que tu me disse, porém eles ficam com umas pequenas travas e alteração da velocidade está pequena demais, teria como aumentar? nesse caso alteraria os valores de 9 e 2?

MUITO OBRIGADO, espero que essa seja a primeira dúvida de várias.

Obrigaado.

Oii Cicero, aqui tudo na paz! Espero que aí também.

Muito obrigada! Fico muito feliz por ter ajudado, de verdade.

Respondendo suas outras perguntas:

  • Os travamentos acontecem pois a mudança de velocidade acontece muitas vezes e o processamento acaba ficando pesado.
  • Os valores dentro de Math.random são o máximo e o mínimo dos valores que esperamos. Como os números gerados são aleatórios e os atores partem de um mesmo ponto, há a chance de esses valores serem muito próximos e o deslocamento ficar muito próximo, também. Perceba que conforme o tempo passa após o play, os atores se distanciam. Uma forma de aumentar esse distanciamento é aplicando o Math.round, assim teremos valores inteiros, e a possibilidade de serem tão próximos diminui. Assim:
function velocidadeAleatoria() {
  return Math.round(Math.random() * (8 - 2) + 2);
}

O que você acha de retirar a função alteraVelocidade de voltaPosicaoInicialCarro e aplicar em marcaPonto, no arquivo ator.js? Talvez seja uma forma mais interessante de aperfeiçoar a jogabilidade.

function marcaPonto(){
  if(yAtor<15){
    meusPontos+=1;
    somDoPonto.play();
    voltaAtorParaPosicaoInicial();
    alteraVelocidades();
    console.log(velocidadeCarro)
  }
}

Teste e me conte se deu certo!

Bons estudos! Abraço.