声明空对象数组时无法使用构造函数创建新对象

Can't create new objects using constructor when declaring empty array of objects

我正在使用对象数组编写此p5.js代码,它应该是在我按下鼠标时创建一个由 Particle() 构造函数生成的新对象,然后将其存储到数组 pts[ ].但是,在按下鼠标后,代码不知何故没有进入 for 循环。我试图初始化数组长度,但程序会卡住,我不得不强行退出它...任何人都可以帮助解决这种情况吗?非常感谢!

var pts = []; 
var onPressed;
//pts.length=2;

function setup() {
  createCanvas(720, 720);
  smooth();
  frameRate(30);
  colorMode(HSB);
  rectMode(CENTER);
  background(255);
}

function draw() {
  //draw new particle when pressed
  if (onPressed) {
    println("checked press");
    for (var i=0;i<=pts.length;i++) {
      println("entered for loop");
      var newP = new Particle(mouseX, mouseY, i+pts.length, i+pts.length);
      //println("newP");
      pts.push(newP);
    }
  }
}

function mousePressed() {
  onPressed = true;
  println("presses");
}

function mouseReleased() {
  onPressed = false;
}

function Particle(x, y, xOffset, yOffset){
  println("called Particle");
  this.x=x;
  this.y=y;
  this.xOffset=xOffset;
  this.yOffset=yOffset;
}

你的 for 循环没有多大意义。您的 pts 变量一开始是空的,所以您什么时候输入这个?

for (var i=0;i<=pts.length;i++) {

事实上,你为什么要循环?您似乎只想添加一个新的 Particle:

  var newP = new Particle(mouseX, mouseY, i+pts.length, i+pts.length);
  pts.push(newP);

此外,当您可以只使用现有的 mouseIsPressed 变量时,为什么要创建自己的 onPressed 变量?