Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Простая система частиц

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Частицы генерируются с каждым проходом через цикл draw(), падают в соответствии с силой притяжения и со временем исчезают. Объект ParticleSystem управляет меняющимся размером списка (ArrayList), в котором хранятся частицы.

Пример

  1. ParticleSystem ps;
  2.  
  3. void setup() {
  4.   size(640, 360);
  5.   ps = new ParticleSystem(new PVector(width/2, 50));
  6. }
  7.  
  8. void draw() {
  9.   background(0);
  10.   ps.addParticle();
  11.   ps.run();
  12. }
  13.  
  14.  
  15. // класс для управления меняющимся количеством частиц «Particle»;
  16. // все частицы хранятся в списке «particles»
  17.  
  18. class ParticleSystem {
  19.   ArrayList<Particle> particles;
  20.   PVector origin;
  21.  
  22.   ParticleSystem(PVector position) {
  23.     origin = position.copy();
  24.     particles = new ArrayList<Particle>();
  25.   }
  26.  
  27.   void addParticle() {
  28.     particles.add(new Particle(origin));
  29.   }
  30.  
  31.   void run() {
  32.     for (int i = particles.size()-1; i >= 0; i--) {
  33.       Particle p = particles.get(i);
  34.       p.run();
  35.       if (p.isDead()) {
  36.         particles.remove(i);
  37.       }
  38.     }
  39.   }
  40. }
  41.  
  42.  
  43. // простой класс «Particle»
  44.  
  45. class Particle {
  46.   PVector position;
  47.   PVector velocity;
  48.   PVector acceleration;
  49.   float lifespan;
  50.  
  51.   Particle(PVector l) {
  52.     acceleration = new PVector(0, 0.05);
  53.     velocity = new PVector(random(-1, 1), random(-2, 0));
  54.     position = l.copy();
  55.     lifespan = 255.0;
  56.   }
  57.  
  58.   void run() {
  59.     update();
  60.     display();
  61.   }
  62.  
  63.   // функция для обновления позиции:
  64.   void update() {
  65.     velocity.add(acceleration);
  66.     position.add(velocity);
  67.     lifespan -= 1.0;
  68.   }
  69.  
  70.   // функция для отрисовки частиц:
  71.   void display() {
  72.     stroke(255, lifespan);
  73.     fill(255, lifespan);
  74.     ellipse(position.x, position.y, 8, 8);
  75.   }
  76.  
  77.   // видна ли еще частица?
  78.   boolean isDead() {
  79.     if (lifespan < 0.0) {
  80.       return true;
  81.     } else {
  82.       return false;
  83.     }
  84.   }
  85. }

См.также

Внешние ссылки

  1. processing.org - Simple Particle System by Daniel Shiffman