代码之家  ›  专栏  ›  技术社区  ›  Jonathan Laliberte

每500帧从ArrayList中删除元素

  •  1
  • Jonathan Laliberte  · 技术社区  · 8 年前

    我有一个阵列列表:

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

    如何构造语句,以便 predators 每500帧删除一次arraylist?它需要某种循环吗?

    if (frameCount == 500){
     predators.remove(1)
    }
    
    2 回复  |  直到 8 年前
        1
  •  5
  •   The Coding Wombat    8 年前

    如果您已经有一个变量可以跟踪您所在的帧,那么可以使用If语句:

    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
    }
    

    自从你使用 1 作为ArrayList的remove方法的参数,我也这样做了,但请注意,这将始终删除ArrayList中的第二个对象,因为ArrayList索引从0开始计数。

    这将仅在帧计数为500的倍数时运行。

    如果尚未跟踪frameCount,则必须将 frameCount++ 在每帧执行的循环中。

        2
  •  2
  •   Kevin Workman    8 年前

    这个 draw() 函数每秒被调用60次,所以这就是您要使用的循环。这个 frameCount 变量每次自动递增 绘图() 被调用。

    就像编码Wombat说的,你可以使用 the modulo operator 确定变量(如 帧计数 )是值的倍数(如 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
    }