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

[Dúvida] Funcão para movimentar qualquer carro

Pensei em criar uma função que movimente qualquer carro como está abaixo:

let pista;
let vaca;
let carro1;
let xCarro1 = 600;

function preload(){
  pista =  loadImage("imagens/estrada.png");
  vaca = loadImage("imagens/ator-1.png");
  carro1 = loadImage("imagens/carro-1.png");
}

function setup() {
  createCanvas(500, 400);
}

function draw() {
  background(pista);
  image(vaca, 100, 366, 30, 30);
  mostraCarro(carro1, xCarro1, 46);
  movimentaCarro(xCarro1, 2);
}

function mostraCarro(imagem, x, y){
  image(imagem, x, y, 60, 30);
}

function movimentaCarro(xCarro, velocidade){
  xCarro -= velocidade;
}

Porém o carro não se movimeta. Por que isso ocorre? É devido ao escopo das variáveis? Não entendi direito.

Agradeço desde já.

2 respostas
solução!

Olá, André! Tudo bem?

Você está no caminho certo em sua linha de raciocínio! O problema que você está enfrentando é sim relacionado ao escopo das variáveis.

No seu código, a variável xCarro1 é declarada fora da função movimentaCarro(), porém, quando você chama essa função, você está passando um valor para ela, não a variável em si. Isso faz com que a função crie uma nova variável xCarro local, que não tem relação com a xCarro1 que você declarou fora da função.

Para resolver isso, você pode simplesmente chamar a função movimentaCarro() sem passar nenhum valor, e dentro da função, você altera diretamente a variável xCarro1. Veja o exemplo abaixo:

let pista;
let vaca;
let carro1;
let xCarro1 = 600;

function preload(){
  pista =  loadImage("imagens/estrada.png");
  vaca = loadImage("imagens/ator-1.png");
  carro1 = loadImage("imagens/carro-1.png");
}

function setup() {
  createCanvas(500, 400);
}

function draw() {
  background(pista);
  image(vaca, 100, 366, 30, 30);
  mostraCarro(carro1, xCarro1, 46);
  movimentaCarro();
}

function mostraCarro(imagem, x, y){
  image(imagem, x, y, 60, 30);
}

function movimentaCarro(){
  xCarro1 -= 2;
}

Nesse exemplo, a função movimentaCarro() agora está acessando diretamente a variável xCarro1 que foi declarada fora da função, e por isso consegue alterar o seu valor.

Espero ter ajudado e bons estudos!

Obrigado, Matheus. Esclareceu demais a questão.