- 使用一些转向算法让这个 BOID 应用程序进入处理状态。
boids 已存储 每种颜色在两个单独的 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 或 predator,但我无法删除?:
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
,那么您到底为什么要创建一个新的,然后立即将其删除呢?
您尚未发布MCVE ,所以我只能笼统地回答,但这是你需要做的:
第 1 步:重构您的代码,使其更有意义。如果需要,请对每一行进行注释,以确保您确切地知道代码在做什么。但是您不应该执行诸如添加新的 Boid
然后在下一行中将其删除之类的操作。将您的问题分解为更小的步骤,并确保每个步骤本身都能完美运行,然后再尝试将其与其他功能混合。
第 2 步:创建一个函数,该函数采用单个白色 Boid
和红色 Boid
的列表
,如果应该删除该 white Boid
,则返回 true
。使用独立示例草图中的硬编码值自行测试此函数。
第 3 步:迭代您的白色 Boid
,并为每个 Boid 调用您在第 2 步中创建的函数。如果该函数返回 true,则删除该白色 Boid
。您可能需要在此步骤中使用迭代器
。
如果您在其中一个步骤上遇到困难,请发布 MCVE连同具体问题,我们将从那里开始。很难回答一般的“我该怎么做”类型的问题,但回答具体的“我尝试了 X,期望 Y,但得到了 Z”类型的问题要容易得多——特别是如果我们有一个 MCVE,我们实际上可以在我们的系统上运行自己的机器,而不是一些断开连接的片段。
关于java - 从 ArrayList Java 处理 Boid 示例中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901135/