0

我正在扩展这个草图: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); ...
4

1 回答 1

0

听起来你想把代码放在Agent类中,在你更新和绘制之后Agent- 快速查看代码,这可能是类run()中的函数Agent

但我不完全确定你为什么要将每个Agent人的年龄与frameCount. 该frameCount变量只是告诉您草图已经运行了多长时间。您的 if 语句会杀死与草图年龄相同的任何鸟类,这没有任何意义。

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

但是,如果您需要一些友好的建议,我真的建议您使用自己的代码从头开始,而不是尝试修改现有代码,尤其是在您不确定代码如何工作的情况下。使用现有代码似乎可以节省时间,但是如果您还不知道代码是如何工作的,那么您自己编写代码肯定会为自己省去很多麻烦。不过取决于你。

于 2016-01-24T19:03:05.390 回答