Добавление старения к моделированию boids

Я работаю над расширением этого эскиза: http://www.openprocessing.org/sketch/11045

Попытка добавить старение к агентам boids, используя frameCount. Я инициализирую 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 ответ

Похоже, вы хотели бы поместить этот код в Agent после обновления и отрисовки Agent- быстрый взгляд на код, это, вероятно, run() функция в Agent учебный класс.

Но я не совсем уверен, почему вы сравниваете каждый Agentвозраст с frameCount, frameCount Переменная просто говорит вам, как долго работал эскиз. Вы, если утверждение убивает птиц, которые имеют тот же возраст, что и эскиз, что не имеет никакого смысла.

Вместо этого вам нужно иметь две переменные в вашем Agent класс: age переменная, которая начинается в 0 и увеличивается на единицу каждый кадр, и maxAge переменная, которая хранит возраст, в котором Agent должны быть удалены.

Однако, если вам нужен дружеский совет, я бы порекомендовал начать с нуля с вашего собственного кода, а не пытаться модифицировать существующий, особенно если вы еще не совсем уверены, как работает код. Может показаться, что вы экономите время, используя существующий код, но если вы еще не знаете, как работает код, вы наверняка избавите себя от головной боли, написав его самостоятельно. Впрочем, до вас.

Другие вопросы по тегам