开发者问题收集

在画布上循环对象 JS P5

2020-10-20
182

我使用 JS P5。 我创建了一个创建椭圆的函数。 我想让这个椭圆在整个画布上循环,每个椭圆之间留有一定距离。

我没有使用普通椭圆,因为我想稍后在每个椭圆上放置另一个函数。 所以我的问题是如何在我创建的对象上使用 for 循环和嵌套循环。

这是我的代码,我在这里有一个随机的方法,但我想要的是精确的距离,就像整个页面上的网格一样。

像这样 示例

let shapes = [];

function setup() {
  createCanvas(600, 600);
  for (let i = 0; i < 500; i++){
    let x = random(width);
    let y = random(height);

    shapes[i] = new shape(x,y,20);
  }
}

function draw() {
  background(220);

  for (let i = 0; i < shapes.length; i++){
    shapes[i].display();
  }
}


function shape(tx, ty, ts) {
  this.x = tx;
  this.y = ty;
  this.size = ts;
  this.angle = 0;

  this.update = function(mx, my) {
    this.angle = atan2(my - this.y, mx - this.x);
  };

  this.display = function() {
    push();
    fill(153, 204, 0);
    ellipse(this.x, this.y, this.size, this.size);
    pop();
  };
}
1个回答

编辑后的答案:

let shapes = [];

function setup() {
    createCanvas(600, 600);
    for(var x=0;x<width;x+=30){
        for(var y=0;y<height;y+=30){
            shapes.push(new shape(x,y,20));
        }
    }
}

function draw() {
    background(220);

    for (let i = 0; i < shapes.length; i++){
        shapes[i].display();
    }
}


function shape(tx, ty, ts) {
    this.x = tx;
    this.y = ty;
    this.size = ts;
    this.angle = 0;

    this.update = function(mx, my) {
        this.angle = atan2(my - this.y, mx - this.x);
    };

    this.display = function() {
        push();
        fill(153, 204, 0);
        ellipse(this.x, this.y, this.size, this.size);
        pop();
    };
}
2020-10-20