美文网首页
使用ArrayList

使用ArrayList

作者: 大龙10 | 来源:发表于2022-05-08 03:43 被阅读0次

    书名:代码本色:用编程模拟自然系统
    作者:Daniel Shiffman
    译者:周晗彬
    ISBN:978-7-115-36947-5
    目录

    4.3 使用ArrayList

    • 我们可以使用数组管理这些粒子对象。如果粒子系统的粒子数量是恒定的,数组是非
      常有效的工具。
      此外,Processing还提供了一些函数用于改变数组长度,
      比如expand()、contract()、subset()、splice()等。
    • 在本章,我们要使用Java的ArrayList类,
      这是一种更高级的对象列表管理方法。
      你可以在java.util包中找到该类的相关文档
    (http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html)
    

    1、管理

      在系统中创建和添加粒子对象,移除消亡的粒子对象。

    2、迭代器

      可以满足你各种各样的遍历需求。

    • ArrayList的iterator()函数会返回一个迭代器对象。
    • 得到迭代器对象之后,它的hasNext()函数会告诉我们是否有下一个粒子对象,
    • 而调用next()函数得到这个粒子对象。
    • 在遍历过程中,如果你用迭代器调用了remove()函数,当前的粒子对象就会被删除
      (接着向前遍历ArrayList,下一个对象并不会被跳过)。

    3、示例

    示例代码4-2 用迭代器遍历ArrayList

    ArrayList<Particle> particles;
    
    void setup() {
      size(640, 360);
      particles = new ArrayList<Particle>();
    }
    
    void draw() {
      background(255);
    
      particles.add(new Particle(new PVector(width/2, 50)));
    
      // Looping through backwards to delete
      for (int i = particles.size()-1; i >= 0; i--) {
        Particle p = particles.get(i);
        p.run();
        if (p.isDead()) {
          particles.remove(i);
        }
      }
    }
    

    Particle.pde

    class Particle {
      PVector position;
      PVector velocity;
      PVector acceleration;
      float lifespan;
    
      Particle(PVector l) {
        acceleration = new PVector(0, 0.05);
        velocity = new PVector(random(-1, 1), random(-2, 0));
        position = l.copy();
        lifespan = 255.0;
      }
    
      void run() {
        update();
        display();
      }
    
      // Method to update position
      void update() {
        velocity.add(acceleration);
        position.add(velocity);
        lifespan -= 2.0;
      }
    
      // Method to display
      void display() {
        stroke(0, lifespan);
        strokeWeight(2);
        fill(127, lifespan);
        ellipse(position.x, position.y, 12, 12);
      }
    
      // Is the particle still useful?
      boolean isDead() {
        if (lifespan < 0.0) {
          return true;
        } 
        else {
          return false;
        }
      }
    }
    

    4、运行结果

    相关文章

      网友评论

          本文标题:使用ArrayList

          本文链接:https://www.haomeiwen.com/subject/fkziyrtx.html