首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将老化添加到boids模拟

将老化添加到boids模拟
EN

Stack Overflow用户
提问于 2016-01-25 02:05:58
回答 1查看 46关注 0票数 0

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

正在尝试使用frameCount将老化添加到boids代理。我用内建的年龄初始化ArrayList:

代码语言:javascript
复制
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);
}

然后检索它:

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
if (frameCount != age) {
  age = age - 1;
}
if (frameCount == age) {
  boids.remove(this);
}

但是我不确定我应该把它放在代码的什么地方。另外,这是最好的方法吗,还是我把事情搞得过于复杂了?

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

代码语言:javascript
复制
void boid(ArrayList boids) {
  for (int i = 0; i < boids.size(); i++) {
    if (frameCount >= age) {
      boids.remove(this);
    }
  }
}

它从以下位置调用:

代码语言:javascript
复制
void steer(ArrayList boids, ArrayList predators, ArrayList landscape) {
  if (type == 1) boid(boids); ...
EN

回答 1

Stack Overflow用户

发布于 2016-01-25 03:03:05

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

但我完全不明白为什么你要把每个Agent的年龄和frameCount进行比较。frameCount变量只是告诉你草图已经运行了多长时间。你的if语句杀死了任何与草图年龄相同的鸟,这没有任何意义。

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

如果你需要一些友好的建议,我真的建议你用自己的代码从头开始,而不是试图修改现有的代码,特别是如果你还不确定代码是如何工作的。使用现有代码看起来像是在节省时间,但是如果你还不知道代码是如何工作的,那么你自己写代码肯定会省去一大堆麻烦。不过还是由你决定吧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34979416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档