Я пишу программу для имитации поведения флокирования на boids. В настоящее время у меня есть Список поведений, которые boid использует для вычисления следующего вектора движения. При каждом обновлении поведение сбрасывается и могут добавляться новые поведения. При численности населения 100 все работает нормально, хотя, когда я увеличиваю это число, мой Список как-то не очищается должным образом. Где у меня должен быть размер списка 4, иногда это увеличивается до 6 с нулевыми элементами и элементами, которые добавляются дважды вместо одного. Я думаю, это может быть связано с тем, что моя программа l oop работает слишком быстро для вычислений, но я не уверен. Можно ли как-нибудь это выяснить?
Мой код выглядит следующим образом:
foreach(Vehicle boid in mainFlock)
{
boid.behaviours.Clear();
boid.behaviours.Add(new CohesionBehaviour(boid, mainFlock));
boid.behaviours.Add(new SeparationBehaviour(boid, mainFlock));
boid.behaviours.Add(new AlignmentBehaviour(boid, mainFlock));
boid.behaviours.Add(new SeekBehaviour(boid, mainFlockTarget.Pos));
if (boid.behaviours.Count > 4)
Console.WriteLine(boid.behaviours);
boid.Update(timeElapsed);
}
Console.WriteLine () никогда не следует вызывать, хотя иногда (когда я увеличиваю население) size) он печатает это (упрощенно):
[cohesion,
cohesion,
separation,
alignment,
seek,
seek]
и некоторые другие времена (упрощенно):
[cohesion,
separation,
cohesion,
null,
alignment,
seek]
кажется, что в общей сложности 6 элементов.