如何在JavaScript中创建多个类实例?

时间:2019-02-23 14:54:21

标签: javascript arrays class animation automation

我想在我的JavaScript文档中创建某个类的潜在无限数量的实例:

let trees;
const treespawn = () => {
  let x = random(50, windowWidth - 50);
  let y = random(windowHeight /22, windowHeight / 1.13);
  for (let i = 0; i < 20; i++) {
    trees[i] = new Trees(x, y);
    return trees[i];
  }
}

function draw() {
  background(0, 111, 10);
  trees.trunk();
  trees.leaves();
  trees.shudder();
}

class Trees {
  constructor(x, y) {
    stuff--stuff--stuff
  }
  trunk() {
    stuff--stuff--stuff
  }
  leaves() {
    stuff--stuff--stuff
  }
  shudder() { 
    stuff--stuff--stuff
  }
}

一些要点:

  • trees变量是全局声明的,因为我想不出一种方法来将类函数调用保持在作用域内。

  • 我正在使用p5,因此绘制了函数。我已经在setup()函数中创建了所有其他类。

基本说明:

我想多次创建Trees类对象,并在我制作的每个游戏级别开始时将它们显示在画布上。这将在设置为let x和y的参数内每级大约需要20棵树。在更高级别的游戏中,我可能希望增加树木的数量。

您会发现仅编写20-30个变量声明,创建这些类并在每个类中调用所有函数是不现实的。

我意识到这必须通过某种数组方法来完成。 有人可以帮我吗?

谢谢!

更新:

就我所知,没有控制台错误消息,但在画布上看不到任何树木。

function draw() {
  background(0, 111, 10);

  () => {
    let x = random(50, windowWidth - 50);
    let y = random(windowHeight /22, windowHeight / 1.13);
    for (let i = 0; i < 20; i++) {
      trees[i] = new Trees(x, y);
      trees[i].trunk();
      trees[i].leaves();
      trees[i].shudder();
    }
  }
}

1 个答案:

答案 0 :(得分:0)

更新

random不是本机Javascript函数,因此,如果不是从库或其他地方获取它,则可能需要定义它:

function random(lowerBound, upperBound) {
    var range = upperBound - lowerBound + 1;
    return Math.floor(Math.random() * range);
}

尝试一下:

class Trees {
  constructor() {
    stuff--stuff--stuff
  }
  trunk() {
    stuff--stuff--stuff
  }
  leaves() {
    stuff--stuff--stuff
  }
  shudder() { 
    stuff--stuff--stuff
  }
}

const treespawn = () => {
  let x = random(50, windowWidth - 50);
  let y = random(windowHeight /22, windowHeight / 1.13);
  return new Trees(x, y);
}

let trees = [];
for (let i = 0; i < 20; i++) {
  trees.push(treespawn());
}

function draw() {
  background(0, 111, 10);
  trees.forEach(tree => {
    tree.trunk();
    tree.leaves();
    tree.shudder();
  });
}