我正在努力扩展这个草图: http://www.openprocessing.org/sketch/11045
尝试使用 frameCount 将老化添加到 boids 代理中。我初始化具有内置年龄的数组列表:
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); ...
更新和绘制Agent
之后将该代码放在Agent
类中 - 快速查看代码,这可能是Agent
类中run()
函数。
但我不完全确定你为什么要将每个Agent
的年龄与frameCount
进行比较。frameCount
变量只是告诉您草图运行了多长时间。你 if 语句会杀死任何与草图年龄相同的鸟类,这没有任何意义。
相反,您需要在 Agent
类中有两个变量:从 0
开始并以每帧递增 1 的 age
变量,以及一个存储应删除Agent
的年龄的maxAge
变量。
想要一些友好的建议,我真的建议你从头开始使用你自己的代码,而不是试图修改现有的代码,特别是如果你还不确定代码是如何工作的。使用现有代码似乎在节省时间,但如果您还不真正了解代码的工作原理,那么通过自己编写代码,您肯定会省去一堆麻烦。不过由你决定。