粒子体系类

程序员 2024-10-5 05:19:20 25 0 来自 中国
书名:代码本色:用编程模仿自然体系
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目次
4.4 粒子体系类

1、粒子体系类

到如今为止,我们已经做了两件事变:

  • 起首,完成了粒子类,用它形貌单个粒子对象;
  • 之后,学会了ArrayList的用法,把握了如何用它管理粒子对象列表(为所欲为
    地添加和删除列表中的对象)。
  • 下面还要做一件告急事变,那就是用一个类形貌由粒子对象构成的体系——粒子体系类。
    通过它,我们可以将复杂的遍历逻辑从主步调中移除,也可以非常方便地加入其他粒子体系。
2、新特性


  • 比如,加入一个粒子的原点,也就是粒子创建的初始位置,即粒子的发射点,这恰好符合粒子体系“发射器”的概念。
  • 这个原点必须在粒子体系的构造函数中初始化。
3、粒子体系类ParticleSystem

ParticleSystem.pde
class ParticleSystem {  ArrayList<article> particles;  PVector origin;      // 这个粒子体系包罗一个原点  ParticleSystem(PVector position) {    origin = position.get();    particles = new ArrayList<article>();  }  void addParticle() {    particles.add(new Particle(origin));  }  void run() {    for (int i = particles.size()-1; i >= 0; i--) {      Particle p = particles.get(i);      p.run();      if (p.isDead()) {        particles.remove(i);      }    }  }}4、示例

示例代码4-3 单个粒子体系
ParticleSystem ps;void setup() {  size(640,360);  ps = new ParticleSystem(new PVector(width/2,50));}void draw() {  background(255);  ps.addParticle();  ps.run();}Particle.pde
class Particle {  PVector position;  PVector velocity;  PVector acceleration;  float lifespan;  color c;  Particle(PVector l) {    acceleration = new PVector(0,0.05);    velocity = new PVector(random(-1,1),random(-2,0));    position = l.get();    lifespan = 255.0;    c = color(random(255),random(255),random(255));  }  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(c,lifespan);    ellipse(position.x,position.y,12,12);  }    // Is the particle still useful?  boolean isDead() {    if (lifespan < 0.0) {      return true;    } else {      return false;    }  }}5、运行结果

您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:42, Processed in 0.159690 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表