Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Problema de performance - Carros engasgando na movimentação

Olá, decidi dar um passo além do que foi proposto e criei uma função que quando o carro passa do fim da tela a sua velocidade é alterada aleatoriamente conforme trecho abaixo:

function velocidadeCarroDinamica(){
  for (let i = 0; i < imagemCarros.length; i++){
    if(carroPassouDaTela[i]){
      velocidadeCarros[i] = Math.random() * 10
    }
  }
}

Porém isso gerou engasgos na velocidade do carro, como se ele estivesse freiando e acelerando depois que ele já recebeu a nova velocidade.

Acredito que isso sejá por conta do número de de chamadas do for e if que temos nesse projeto.

Alguém sabe como solucionar?

Segue carro.js completo:

//carro

let xCarros = [600, 600, 600, 600, 600, 600]
let yCarros = [40, 96, 150, 210, 270, 318]
let velocidadeCarros = [2 ,2.5 ,3.2, 5, 3.3, 6]
let carroPassouDaTela = [false, false, false, false, false, false,]
let comprimentoCarro = 50
let larguraCarro = 40

function velocidadeCarroDinamica(){
  for (let i = 0; i < imagemCarros.length; i++){
    if(carroPassouDaTela[i]){
      velocidadeCarros[i] = Math.random() * 10
    }
  }
}
function movimentaCarro(){
  for (let i = 0; i < imagemCarros.length; i++){
    xCarros[i] -= velocidadeCarros[i]
  }
}

function voltaPosicaoInicialDoCarro(xAxys){
  for (let i = 0; i < imagemCarros.length; i++){
    if (passouTodaATela(i)){
        xCarros[i] = 600
        carroPassouDaTela[i] = true
    }
  }
}

function passouTodaATela(indice){
  return xCarros[indice] < -50
}

function mostraCarro(){
  for (let i = 0; i < imagemCarros.length; i++){
  image(imagemCarros[i], xCarros[i], yCarros[i], comprimentoCarro, larguraCarro)    
  }
}
1 resposta
solução!

Olá Elias! Tudo bem com você?

Peço desculpa pela demora para responder o seu tópico.

O problema está ocorrendo porque a função velocidadeCarroDinamica() está sendo chamada muitas vezes dentro do loop principal. Uma solução seria fazer a atribuição de valores aleatórios, para a velocidade de um determinado carro, quando a função voltaPosicaoInicialDoCarro() for chamada. Assim, o problema dos engasgos dos carros não irá acontecer.

Exemplo da solução comentada anteriormente:

function voltaPosicaoInicialDoCarro(xAxys){
  for (let i = 0; i < imagemCarros.length; i++){
    if (passouTodaATela(i)){
        xCarros[i] = 600
        velocidadeCarros[i] = Math.random() * 10
    }
  }
}

Espero ter lhe ajudado. Caso tenha mais dúvidas ou problemas, relacionados com este tópico, estarei à disposição para ajudá-lo.

Grande abraço e bons estudos!

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