用多态实现粒子体系

源码 2024-9-26 11:19:45 147 0 来自 中国
书名:代码本色:用编程模拟自然体系
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目次
4.10 用多态实现粒子体系



  • 我们假设没有多态的存在,
    这时要实现前面的粒子体系类,使粒子体系同时包含多个粒子对象和Confetti对象。
    创建了两个列表,一个用于存放粒子对象,另一个用于存放Confetti对
    象。我们要对同样的操纵重复两次!
  • 有了面向对象的多态,以上代码就能得到简化:
    只需创建一个ArrayList,同时存放粒子对象和Confetti对象。
    我们并不必要关心获得的对象属于什么范例,多态会替我们完成这些事变!
1、示例

示例代码4-5 粒子体系的继续和多态
ParticleSystem ps;void setup() {  size(640,360);  ps = new ParticleSystem(new PVector(width/2,50));}void draw() {  background(255);  ps.addParticle();  ps.run();}2、Particle.pde 粒子类

(同前,略)
3、Confetti.pde  继续类(方块带旋转的粒子)

class Confetti extends Particle {  // We could add variables for only Confetti here if we so  Confetti(PVector l) {    super(l);  }  // Inherits update() from parent  // Override the display method  void display() {    rectMode(CENTER);    fill(c,lifespan);    stroke(0,lifespan);    strokeWeight(2);    pushMatrix();    translate(position.x,position.y);    float theta = map(position.x,0,width,0,TWO_PI*2);    rotate(theta);    rect(0,0,12,12);    popMatrix();  }}4、ParticleSystem.pde 粒子体系类(多态)

class ParticleSystem {  ArrayList<article> particles;  PVector origin;  ParticleSystem(PVector position) {    origin = position.get();    particles = new ArrayList<article>();  }  void addParticle() {    float r = random(1);    if (r < 0.5) {       particles.add(new Particle(origin));    }     else {      particles.add(new Confetti(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);      }    }  }}5、运行结果

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

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

GMT+8, 2025-6-28 02:41, Processed in 0.176482 second(s), 33 queries.© 2003-2025 cbk Team.

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