如何从另一个对象

时间:2018-04-24 17:43:01

标签: processing

所以在我的程序中我有一个名为Creatures的对象,我已经通过一个数组加载它,一切都很精致和花花公子。但我想为生物添加一种方法来重新生成并因此将他的副本添加到数组中,但问题是数组被保存在另一个对象中。到目前为止这是我的代码:(我已经删除了一些不相关的代码) 我的代码运行的主要部分:

// Setting creature
Creature[] Creatures = new Creature[20];

void setup() {
  size(1280,720,P2D);

  // Initializing Creatures
  for(int i = 0; i < Creatures.length; i++) {
    Creatures[i] = new Creature(true, "");
  }
}

void draw()
{
  update();

  //TODO: Add more
}

void update() {
  //Updating the creatures
  for(int i = 0; i < Creatures.length; i++) {
    Creatures[i].update();
  }
}

与Creature类的部分:

class Creature {
  String race;

  float x;
  float y;

  float r;
  float g;
  float b;

  ExtraUtils EU = new ExtraUtils();

  Creature(boolean genned, String pRace) {
    x = (float)Math.random() * width;
    y = (float)Math.random() * height;

    r = (float)Math.random() * 255;
    g = (float)Math.random() * 255;
    b = (float)Math.random() * 255;

    if(genned)
    {
      race = EU.RandomString(round((float)Math.random()*5+3));
    } else {
      race = pRace;
    }
  }

  void update() {
    strokeWeight(0);
    fill(r,g,b);

    x+=(float)Math.random()*3 - 1.5;
    y+=(float)Math.random()*3 - 1.5;

    rect(x,y,8,8);

    text(race,x,y);
  }
}

如果有人愿意帮助我(我的意思是从Creature类中向Creatures数组中添加一个新生物),我会非常高兴!

2 个答案:

答案 0 :(得分:1)

不要使用数组,使用ArrayList。它更有活力。

所以,我们将拥有内部生物:

class Creature {

    ArrayList<Creature> creatures = new ArrayList<Creature>();

    //You can access the above ArrayList and add to it at any point in this class with creature.add().

    //The rest of your class below.

}

由于你在Creature类中定义了ArrayList,要添加它,只需引用该类的对象。

Creature creature = new Creature(); //Whatever constructor paramaters you want to use.
creature.creatures.add();           //This is where you will add your object.

<强>更新

我想花时间充分解释最终的实施。

您已在ArrayList课程中创建Creature,这意味着您的草图中不需要Creature[]数组。所以,删除它,以及Setup()中的for循环。

如果要更新Creature ArrayList中的creatures对象,在草图内(而不是Creature类),您只需执行此操作:

for(int i = 0; i < creature.creatures.size; i++) {
    creature.creatures.get(i).update();
}

总之,以下是适用于您的实施的最终代码片段:

1。)类Creature中无需更改。除了添加前面提到的Creature之外,ArrayList类没有任何更改。

2。)你的草图:

// Setting Creature Object
Creature creature = new Creature(); //Whatever paramaters you want to add for the constructor.

void setup() {
    size(1280,720,P2D);

    // Initalizing Creature objects inside list.
    for(int i = 0; i < QUANTITY_TO_ADD; i++) {
        creatures.creature.add(new Creature(true, ""));
    }
}

void draw()
{
    update();

    //TODO: Add more
}

void update() {
   //Updating the creatures
  for(int i = 0; i < creature.creatures.size(); i++) {
      creature.creatures.get(i).update();
  }
}

注意: QUANTITY_TO_ADD仅仅是占位符。

<强>结论:

现在,您的实现是动态的,并且您只存储了一个ArrayList副本,因此您不必担心在类之间保存更新。 ArrayList在Creature中初始化,您可以使用add()get()方法在任何地方修改或获取任何元素,只要您使用Creature的对象即可要访问它的类。

答案 1 :(得分:0)

将生物数组指针传递给Creature的成员函数应该有帮助,对吗?