热点新闻
粒子系统类
2023-07-09 03:23  浏览:1790  搜索引擎搜索“早勤网”
温馨提示:信息一旦丢失不一定找得到,请务必收藏信息以备急用!本站所有信息均是注册会员发布如遇到侵权请联系文章中的联系方式或客服删除!
联系我时,请说明是在早勤网看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

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

4.4 粒子系统类

1、粒子系统类

到目前为止,我们已经做了两件事情:

  • 首先,完成了粒子类,用它描述单个粒子对象;
  • 之后,学会了ArrayList的用法,掌握了如何用它管理粒子对象列表(随心所欲
    地添加和删除列表中的对象)。
  • 下面还要做一件重要事情,那就是用一个类描述由粒子对象组成的系统——粒子系统类。
    通过它,我们可以将复杂的遍历逻辑从主程序中移除,也可以非常方便地加入其他粒子系统。

2、新特性

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

3、粒子系统类ParticleSystem

ParticleSystem.pde

class ParticleSystem { ArrayList<Particle> particles; PVector origin; // 这个粒子系统包含一个原点 ParticleSystem(PVector position) { origin = position.get(); particles = new ArrayList<Particle>(); } 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、运行结果






发布人:f009****    IP:101.229.26.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发