5
respostas

Utilização do FOR dando errada

Estou tentando seguir os passos do professor, porém adicionando já os outros 3 carrinhos, porém tem dado erro na parte de mostrar os carros, só consigo fazer de forma que apareçam 3 carros (com o método e código do professor), ou fazendo de forma sem utilizar o laço For. Alguém conseguiria me responder o que eu deveria mudar ou tentar ajeitar para que funcionasse??

MEU CÓDIGO

//variáveis para os Carros

let yCars = [30, 110, 195, 285, 360, 445]
let xCars = [850, 850, 850, 850, 850, 850]
let velCars = [3, 5, 5.5, 6.5, 7, 8]


function showCars(){
  for (let count = 0; count < (imgCars.length) * 2; count = count + 1){
    image(imgCars[count], xCars[count], yCars[count], 125, 125);
  }
}

function carMovement(){
  for(let count = 0; count < (imgCars.length) * 2; count += 1){
    xCars[count] -=  velCars[count]
  }
}

function carLoop(){
  for(let count = 0; count < (imgCars.length) * 2; count += 1){
      if(outWindowRange(xCars[count])){
      xCars[count] = 850
    }
  }
}

function outWindowRange(xCarro){
  return xCarro < -120;
}

ERRO DO MEU CÓDIGO

TypeError: Cannot read properties of undefined (reading 'width')
    at undefined:81020:28

p5.js says: image() was expecting p5.Image|p5.Element for the first parameter, received an empty variable instead. (on line 10 in car.js [/car.js:10:5])

If not intentional, this is often a problem with scope: [https://p5js.org/examples/data-variable-scope.html]. (http://p5js.org/reference/#/p5/image) 

CÓDIGO DO PROFESSOR

//variáveis para os Carros

let yCars = [30, 110, 195, 285, 360, 445]
let xCars = [850, 850, 850, 850, 850, 850]
let velCars = [3, 5, 5.5, 6.5, 7, 8]


function showCars(){
  for (let count = 0; count < imgCars.length; count = count + 1){
    image(imgCars[count], xCars[count], yCars[count], 125, 125)
  }
}

function carMovement(){
  for(let count = 0; count < imgCars.length; count += 1){
    xCars[count] -=  velCars[count]
  }
}

function carLoop(){
  for(let count = 0; count < imgCars.length; count += 1){
      if(outWindowRange(xCars[count])){
      xCars[count] = 850
    }
  }
}

function outWindowRange(xCarro){
  return xCarro < -120;
}

( o código do professor só aparecem 3 carros)

5 respostas

Verifique a linha 10 em car.js

Marcelo, já verifiquei a linha 10, não consigo entender o que poderia estar fazendo dar errado, você sabe o que pode ser?

Esse (imgCars.length) * 2 deve ser o problema. Eu criei outros três carros no paint e adicionei eles bem no começo. Assim não cheguei a colocar * 2.

iai cara tudo bem? oque deu certo para mim colocar os outros carros nas outras ruas foi aumentar a quantidade de imagensCarro la na função preload, ficou assim

function preload(){ imagemEstrada = loadImage("imagens/estrada.png") imagemAtor = loadImage("imagens/ator-1.png") imagemCarro1 = loadImage("imagens/carro-1.png") imagemCarro2 = loadImage("imagens/carro-2.png") imagemCarro3 = loadImage("imagens/carro-3.png") imagemCarros = [imagemCarro1, imagemCarro2, imagemCarro3,imagemCarro1, imagemCarro2, imagemCarro3]; }

Isso que Lucas falou resolve o problema. O erro tá no imgCars. Como não foi adicionado os elementos na lista, o for tenta acessar um item inexistente imgCars[3] (já que inicialmente só existem os índices 0, 1 e 2). Por isso ocorre o erro a seguir:

TypeError: Cannot read properties of undefined (reading 'width')

Aqui diz que não consegue ler a propriedade de undefined. Como imgCars[3] não existe, isso retorna undefined, e ao tentar uma propriedade disso, dá erro. Espero ter ajudado.