【问题标题】:Can't create new objects using constructor when declaring empty array of objects声明空对象数组时无法使用构造函数创建新对象
【发布时间】:2016-10-05 21:23:23
【问题描述】:

我正在使用对象数组编写此 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;
}

【问题讨论】:

  • draw() 中的代码看起来想为列表中的每个粒子添加一个新粒子。如果有 0 个粒子,则添加 0 个。

标签: javascript arrays object constructor p5.js


【解决方案1】:

您的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);

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

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2016-07-01
    • 2019-07-25
    • 2013-10-30
    • 2018-07-11
    相关资源
    最近更新 更多