每隔500帧从ArrayList中删除元素

时间:2016-01-20 18:21:09

标签: java arraylist processing

我有这个arraylist:

// Add predators
predators = new ArrayList();
for (int i = 0; i < predNum; i++) {
  Creature predator = new Creature(random(width), random(height), 2);
  predators.add(predator);
}

如何构造语句,以便每500帧删除predators arraylist中的最后一个元素?它需要某种循环吗?

if (frameCount == 500){
 predators.remove(1)
}

2 个答案:

答案 0 :(得分:5)

如果你已经有一个跟踪你所在框架的变量,你可以使用这个if语句:

61|00

由于您使用if (frameCount % 500 == 0) { predators.remove(1); //use this if you want to remove whatever is at index 1 every 500 frames predators.remove(predators.size() -1); //use this if you want to remove the last item in the ArrayList } 作为ArrayList的remove方法的参数,我也这样做了,但请注意,这将始终删除arrayList中的第二个对象,因为arrayList索引从0开始计数。

只有每次framecount为500的倍数时才会运行。

如果你还没有跟踪frameCount,你必须将1放在每帧执行的循环中。

答案 1 :(得分:2)

draw()函数每秒调用60次,因此您将使用循环。每次调用frameCount时,draw()变量都会自动递增。

与Coding Wombat一样,您可以使用the modulo operator来确定变量(如frameCount)何时是值的倍数(如500)。

你可以将这些想法结合起来做一次500帧的事情:

ArrayList<Creature> predators = new ArrayList<Creature>();

void setup(){
  for (int i = 0; i < predNum; i++) {
    Creature predator = new Creature(random(width), random(height), 2);
    predators.add(predator);
  }
}

void draw(){
  if (frameCount % 500 == 0){
   predators.remove(predators.size()-1);
  }

  //draw your frame
}