ParticleSystem을 만들기 전에 단일 입자를 묘사할 객체를 생성해야 합니다. 좋은 소식은 이미 이것을 했다는 것입니다. 힘에 관해 배울 때 만든 Mover 객체가 완벽한 템블릿 역할을 합니다. 여기서 입자는 스크린을 돌아다니는 독립적인 물체입니다. 입자에는 location, velocity, acceleration과 그러한 변수를 초기화하는 생성자와 입자를 보여주는 display() 함수, 위치를 갱신하는 update() 함수가 있습니다.
// A simple Particle object
var Particle = function(position) {
  this.acceleration = new PVector();
  this.velocity = new PVector();
  this.position = position.get();
};

Particle.prototype.update = function(){
  this.velocity.add(this.acceleration);
  this.position.add(this.velocity);
};

Particle.prototype.display = function() {
  stroke(0, 0, 0);
  fill(175, 175, 175);
  ellipse(this.position.x, this.position.y, 8, 8);
};
이것은 입자에 관한 가장 간단한 코드입니다. 여기에서 여러 방향으로 입자를 발전시킬 수 있습니다. applyForce() 메소드를 추가하여 입자의 행동에 영향을 줄 수도 있고 (이후 예제에서 해볼 것입니다) 색깔과 모양을 설명하는 변수를 추가하거나 image()를 이용하여 입자를 그릴 수도 있습니다. 지금은 단지 하나의 추가사항인 lifespan을 더하는 것에 중점을 둡시다.
일반적인 입자 시스템은 에미터라고 하는 것을 포함합니다. 에미터는 입자의 근원이며 입자, 위치, 속도 등에 대한 초기 설정을 제어합니다. 에미터는 입자를 한 번만 방출할 수도, 입자를 지속해서 방출할 수도 있고 둘 다 일 수도 있습니다. 이와 같은 일반적인 구현 방법에서 입자는 에미터에서 생겨나지만, 영원히 살아있지는 않습니다. 만약 영원히 존재하면 시간이 갈수록 입자의 수가 다루기 힘들 정도로 증가하게 되고 결과적으로 프로그램이 서서히 멈추게 됩니다. 새로운 입자가 생겨나면 이전 입자는 죽도록 해야 합니다. 이렇게 하면 입자의 흐름이 영원한 것같은 착시를 주면서도 프로그램의 성능이 악화되지 않습니다.
입자가 사라질 때를 결정하는 방법을 매우 다양합니다. 예를 들어 또 다른 객체와 접촉하거나 단순히 스크린을 떠날 수 있습니다. 첫 번째 Particle 객체에 대해 timeToLive 프로퍼티를 추가해 봅시다. 이것은 255에서 0까지 카운트다운되는 타이머 역할을 하고 0이 되면 "죽었다"고 생각합니다. 따라서 Particle 객체를 다음과 같이 발전시킬 수 있습니다:
// A simple Particle object
var Particle = function(position) {
  this.acceleration = new PVector();
  this.velocity = new PVector();
  this.position = position.get();
  this.timeToLive = 255;
};

Particle.prototype.update = function(){
  this.velocity.add(this.acceleration);
  this.position.add(this.velocity);
  this.timeToLive -= 2;
};

Particle.prototype.display = function() {
  stroke(255, 255, 255, this.timeToLive);
  fill(127, 127, 127, this.timeToLive);
  ellipse(this.position.x, this.position.y, 8, 8);
};
timeToLive를 255에서 시작하여 0으로 세는 것은 편리성 때문입니다. 이렇게 하면 타원에 대한 알파 투명도로 timeToLive를 이용할 수 있습니다. 입자가 “죽으면” 스크린에서 희미해질 겁니다.
멤버변수 timeToLive와 함께 새로운 메소드를 하나 추가해야 합니다. 이 (참 또는 거짓을 구하는) 함수는 입자가 살았는지 죽었는지 알아내기 위해 필요합니다. 이것은 입자들의 목록 자체를 관리하는 ParticleSystem 객체를 작성할 때 도움이 될 것입니다. 이 함수를 작성하는 것은 꽤 쉽습니다. 단지 timeToLive의 값이 0보다 작은지를 확인하면 됩니다. 조건이 맞으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
Particle.prototype.isDead = function() {
  if (this.timeToLive < 0) {
      return true;
  } else {
    return false;
  }
};
많은 입자를 만드는 단계로 넘어가기 전에 Particle 객체 하나를 갖고 입자가 올바르게 동작하는지 확인하고 스케치를 만들어 보는 것이 중요합니다. 다음은 두 가지가 추가된 전체 코드입니다. update()display()를 호출하는 run() 이라 불리는 편의 메소드를 추가합니다. 또한 입자에 임의의 초기 속도뿐만 아니라 (중력을 시뮬레이션 하는) 하향의 가속도를 줍니다.
이제 단일 입자에 대한 객체를 생성했습니다. 다음 단계로 넘어갈 준비가 되었습니다. 특정 시간에 얼마나 많은 입자를 생성했는지를 한 눈에 알 수 없을 때 많은 입자를 어떻게 기록할까요?’