该BOID应用程序正在使用一些引导算法进行处理。
投标被存储
在每种颜色的两个单独的ArrayList中。
红色的小鸟(掠食者)有一个
追求功能:
class Creature {
int prey = 1;
PVector pursue(ArrayList boids) {
PVector steer = new PVector();
if (prey < boids.size()) {
Creature boid = (Creature) boids.get(prey);
steer = PVector.sub(boid.location, location);
steer.mult(maxpursue);
}
return steer;
}
此功能使红色辫子站在目标白色辫子的顶部。
问题在于,当所有红色辫子都在上面时,该白色辫子消失。 (如上图所示)
我可以使用以下内容添加新的Boid或捕食者,但无法删除?:
void mousePressed() {
if (mouseButton == LEFT){
Creature predator = new Creature(mouseX, mouseY, 2);
planet.boids.add(predator);
} else if (mouseButton == RIGHT) {
Creature boid = new Creature(mouseX, mouseY, 1);
planet.boids.add(boid);
planet.boids.remove(boid); // This line does not work?
}
}
最佳答案
您发布的代码毫无意义。您想删除现有的Boid
,那么为什么要创建一个新的Boid
然后立即将其删除?
您尚未发布MCVE,所以我只能从一般意义上回答,但这是您需要做的:
第1步:重构代码,使其更具意义。如有必要,请注释每一行,以确保您确切知道代码在做什么。但是您不应该执行添加新的white Boid
然后在下一行将其删除的操作。将您的问题分解为较小的步骤,并在尝试将其与其他功能混合使用之前,确保每个步骤都能完美地完成工作。
步骤2:创建一个函数,该函数使用单个List
和red Boids
的true
,如果应该删除该white Boid
,则返回white Boids
。在独立的示例草图中使用硬编码的值单独测试此功能。
步骤3:遍历white Boid
并为每个调用在步骤2中创建的函数。如果函数返回true,则删除该Iterator
。您可能要在此步骤中使用。
如果您受困于其中一个步骤,请发布MCVE以及一个特定的问题,我们将从那里开始。很难回答一般的“我该如何做”类型的问题,但是回答特定的“我尝试过X,期望Y,但是却得到Z”类型的问题要容易得多-特别是如果我们有MCVE,我们实际上可以在我们的机器上运行自己的机器,而不是一些断开的片段。