该BOID应用程序正在使用一些引导算法进行处理。


java - 从ArrayList Java处理Boid示例中删除元素-LMLPHP


投标被存储
在每种颜色的两个单独的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:创建一个函数,该函数使用单个Listred Boidstrue,如果应该删除该white Boid,则返回white Boids。在独立的示例草图中使用硬编码的值单独测试此功能。

步骤3:遍历white Boid并为每个调用在步骤2中创建的函数。如果函数返回true,则删除该Iterator。您可能要在此步骤中使用。

如果您受困于其中一个步骤,请发布MCVE以及一个特定的问题,我们将从那里开始。很难回答一般的“我该如何做”类型的问题,但是回答特定的“我尝试过X,期望Y,但是却得到Z”类型的问题要容易得多-特别是如果我们有MCVE,我们实际上可以在我们的机器上运行自己的机器,而不是一些断开的片段。

10-04 11:39