访问数组给出未定义的p5.js

时间:2018-01-09 13:50:22

标签: javascript p5.js

这是我对这个问题的第二次尝试,希望我可以对我的问题更清楚一些。我有一个初始的p5.js设置:

// Setup empty array (I beleive 'position' this is in the global scope?)
let position = []
//p5 setup
function setup(){
  createCanvas(400,400)
  // Simple for loop to create an array of floating random numbers between 5 and 10 using the p5.js random function
  for(let i = 0; i < 10 ; i++){
    let x = random(5,10)
    position.push(x)
  }
}
function draw(){
  background(100)
  text(`This is the implementation of random ${random(5,10)`,10,10)
}
// Loging position unless I am mistaken, does NOT show the array
console.log(position)
// But trying to access an specific value within the array gives an 'undefined'
console.log(position[1])
// Undefined

我如何访问个人值?

let position = []

function setup() {
  createCanvas(400, 400);
  for (let i = 0; i < 10; i++) {
    let x = random(5, 10)
    position.push(x)
  }
}
console.log(`The position array is ${position}`)
console.log(`The length of the position array is ${position.length}`)
console.log(`The second value in the position array is ${position[1]}`)

function draw() {
  background(200)
  text(`This is the implementation of random ${random(5,10)}`,10,10)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.16/p5.js"></script>

1 个答案:

答案 0 :(得分:0)

请理解代码执行的顺序。考虑一下这个基本的例子:

console.log('one');

function setup(){
  console.log('two');
}

function draw(){
  console.log('three');
}

加载代码后,会发生这种情况:

  • 运行第一个console.log()语句并打印'one'
  • setup()功能已定义但尚未运行。
  • draw()功能已定义但尚未运行。
  • 稍后,将调用setup()draw()函数。

现在考虑这个例子,它更接近你所拥有的:

function setup(){
  console.log('two');
}

console.log('one');

function draw(){
  console.log('three');
}

运行此代码时,会发生以下情况:

  • setup()功能已定义但尚未运行。
  • 运行console.log('one')语句并打印'one'
  • draw()功能已定义但尚未运行。
  • 稍后,将调用setup()draw()函数。

换句话说,在函数外部运行的代码在P5.js库自动调用这些函数之前运行。在您的情况下,您正在运行访问数组的代码,然后再添加任何内容。

要解决此问题,请在setup()功能中移动代码。这就是它的全部意义。