2
respostas

Jogos clássicos parte 2: Aula 3 [Criação de listas]

Olá, considerando que o valor atribuído ao X do carro é equivalente 600 nos três carros, por que ele não funciona se eu associar todas as vezes em que eu preciso chamar o "xCarros" á posição zero? Ao invés disso eu preciso fazer -> let xCarros = [600, 600, 600]

Criei uma cópia do exercício e fiz isso pra ver se funcionava, e todos os carros passaram a andar em paralelo... sendo que eu mantive a velocidade de cada carro única. Gostaria de entender. Obrigado!

// código do carro

let xCarros = [600];
let yCarros = [40, 96, 150];
let velocidadeCarros = [2, 2.5, 3.2];

function mostraCarro () {
  image(imagemCarro, xCarros[0], yCarros[0], 50, 40);
  image(imagemCarro2, xCarros[0], yCarros[1], 50, 40);
  image(imagemCarro3, xCarros[0], yCarros[2], 50, 40);
  print (yCarros[1])
}

function movimentaCarro (){
  xCarros[0] = xCarros[0] -= velocidadeCarros[0];
  xCarros[0] = xCarros[0] -= velocidadeCarros[1];
  xCarros[0] = xCarros[0] -= velocidadeCarros[2];
}

function voltaPosicaoInicialDoCarro(){
  if (xCarros[0] < -50){
  xCarros[0] = 600 
  }
  if (xCarros[0] < -50){
  xCarros[0] = 600 
  }
  if (xCarros[0] < -50){
  xCarros[0] = 600   
  }
}
2 respostas

Olá Cassiano, tudo bem com você?

Então esse problema acontece porque por mais que você deixou velocidades diferentes, a posição acabou sendo igual para todos, vou te explicar:

Veja que quando escrevemos:

let xCarros = [600, 600, 600];

Estamos dizendo que os 3 carros começam na mesma posição, entretanto a partir desse momento o valor de x de cada carro será totalmente diferente de acordo com a velocidade única, então depois de 1 segundo teoricamente era para termos algo, parecido como:

let xCarros = [ 200, 250, 320];

Quando você associou todos a um único valor, por mais que as velocidades fossem diferentes, o atributo era sempre o mesmo!

Então veja que em seu código se você colocar a velocidade de um carro em 0 ele ainda continuará paralelo, isso porque o movimento dos outros carros está mudando a sua direção, entendeu?

Por isso é necessário separar o nosso xCarro em 3 valores, por mais que pareçam utilizar o mesmo valor por ser idênticos no primeiro instante, depois cada um terá um x diferente de acordo com a velocidade que estamos diminuindo :)

Entendeu? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!

Fala, Cassiano! Tudo bem? Como vai?

Só complementando...

Podemos estabelecer um valor fixo em uma variável em vez de uma array. Por exemplo:

//codigo do carro

//carro 1
let xCarro = 600;
let yCarro = 40;
let velocidadeCarro1 = 2;

//carro 2
let xCarro2 = 600;
let yCarro2 = 96;
let velocidadeCarro2 = 2.5;

//carro 3
let xCarro3 = 600;
let yCarro3 = 150;
let velocidadeCarro3 = 3.2;



function mostraCarro(){
  image(imagemCarro, xCarro, yCarro, 50, 40);
  image(imagemCarro2, xCarro2, yCarro2, 50, 40);
  image(imagemCarro3, xCarro3, yCarro3, 50, 40);
}

function movimentaCarro(){
  xCarro -= velocidadeCarro1;
  xCarro2 -= velocidadeCarro2;
  xCarro3 -= velocidadeCarro3;
}

function voltaPosicaoInicialDoCarro() {
  if (xCarro < -50) {
    xCarro = 600
  }
  if (xCarro2 < -50) {
    xCarro2 = 600
  }
  if (xCarro3 < -50) {
    xCarro3 = 600
  }
}

Neste caso, estabeleci valores fixo nas variáveis x, y e velocidadeCarro.

O ponto (muito) negativo: você terá que escrever mais códigos para cada carro.

Trabalhar com arrays nós precisamos especificar cada posição, mesmo que existam valores repetidos.

É isso aí!!