我正在努力扩展此草图: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); ...
答案 0 :(得分:0)
在您对Agent
进行更新和绘制之后,听起来您希望将该代码放在Agent
类中 - 快速查看代码,可能是run()
类中的Agent
函数。
但我不完全确定你为什么要将每个Agent
的年龄与frameCount
进行比较。 frameCount
变量只会告诉您草图运行了多长时间。你如果陈述杀死了与草图年龄相同的任何鸟类,这没有任何意义。
相反,您需要在Agent
类中包含两个变量:age
变量,从0
开始,每帧递增1,变量maxAge
存储应删除Agent
的年龄。
如果您想要一些友好的建议,我真的建议您从头开始使用自己的代码,而不是尝试修改现有的代码,特别是如果您还不确定代码是如何工作的。看起来您可以通过使用现有代码来节省时间,但如果您还不知道代码是如何工作的,那么通过自己编写代码,您绝对可以避免一些麻烦。尽管如此。