添加老化到boids模拟

时间:2016-01-24 18:05:58

标签: arraylist processing boids

我正在努力扩展此草图:http://www.openprocessing.org/sketch/11045

尝试使用frameCount向boids代理添加老化。 我初始化了内置年龄的ArrayList:

boids = new ArrayList();
for (int i = 0; i < boidNum; i++) {
  Agent boid = new Agent(random(width), random(height), 1, round(frameCount + random(300, 400)));
  boids.add(boid);
}

然后检索它:

Agent(float posX, float posY, int t, int a) {
mass = 5.0;
location = new PVector(posX, posY);
vel = new PVector(random(-5,5), random(-5, 5));
acc = new PVector();
type = t;
wdelta = 0.0;
action = 0;
age = a;
}

我想在生活周期中使用这样的东西:

if (frameCount != age) {
  age = age - 1;
}
if (frameCount == age) {
  boids.remove(this);
}

但是我不确定我应该把代码放在哪里。 这也是最好的方法吗,还是我过于复杂的事情?

更新: 我写了一个新方法:

void boid(ArrayList boids) {
  for (int i = 0; i < boids.size(); i++) {
    if (frameCount >= age) {
      boids.remove(this);
    }
  }
}

来自:

void steer(ArrayList boids, ArrayList predators, ArrayList landscape) {
  if (type == 1) boid(boids); ...

1 个答案:

答案 0 :(得分:0)

在您对Agent进行更新和绘制之后,听起来您希望将该代码放在Agent类中 - 快速查看代码,可能是run()类中的Agent函数。

但我不完全确定你为什么要将每个Agent的年龄与frameCount进行比较。 frameCount变量只会告诉您草图运行了多长时间。你如果陈述杀死了与草图年龄相同的任何鸟类,这没有任何意义。

相反,您需要在Agent类中包含两个变量:age变量,从0开始,每帧递增1,变量maxAge存储应删除Agent的年龄。

如果您想要一些友好的建议,我真的建议您从头开始使用自己的代码,而不是尝试修改现有的代码,特别是如果您还不确定代码是如何工作的。看起来您可以通过使用现有代码来节省时间,但如果您还不知道代码是如何工作的,那么通过自己编写代码,您绝对可以避免一些麻烦。尽管如此。