1. Moving the Particles off the grid

Particle들은 멈춰 있도록 설계되지 않았고 어떤 이벤트에의해 살아 움직이는 하나의 데이터로 볼 수 있다. 위치 정보도 가지지만 다른 정보도 가질수 있는 하나의 데이터 클래스라고 보면 된다. 


2. Creating Particles with Mouse Events

마우스 이벤트를 추가하고 눌렸을때만 이미지를 그리도록 한다.

예제에는 없지만 mouseDrag 함수도 있어야 마우스가 이동할 때 circle을 그릴 수 있다.

마우스 이동에 대한 이벤트는 다음과 같이 처리하면 된다.


마우스가 눌리면 mIsPressed 가 true가 되면서 update에서는 Particle을 더해 주도록 한다.



ParticleController에서는 5개의 Circle을 추가하라는 명령이 들어오면 10.0f만큼의 주위로 random하게 circle의 위치를 정해 주도록 한다. 


이 예제에서는 circle을 마우스 포인터가 찍히는데마다 5개씩 추가한다. 실행 시켜보면 다음과 같은 이미지를 볼 수 잇다.



3. Particle Death

위 예제는 particle이 계속 추가되고 살아 있게 된다. 처음에는 괜찮겠지만 particle 이 많아질 수록 점점 느려질것이다. 이번에는 particle에 age를 주어서 사라지도록 하자. 각 particle은 0으로 시작해서 random하게 할당 받은 나이가 되면 사라지도록 하자. update가 발생하면 particle은 1살 씩 먹는다.


particle에서 mAge는 0으로 시작하고 mLifespan은 50~ 250까지의 random number로 설정한다.


update가 발생하면 mAge는 1씩 증가하며 mLifespan 보다 크게 되면 particle은 ParticleController에서 제거된다.


ParticleController에서는 mIsDead가 true 이면 Particle List에서 Particle을 제거한다.



4. Particle Velocity

현재 particle들은 제자리에 머물러 있다가 시간이 되면 사라진다. 이제 Particle들이 살아서 움직이도록  해보자. cinder에서는 이동할 position을 설정하고 velocity를 설정할 수 있도록 되어 있다. 이때 이동할 때 까지 속도는 변하지 않는다.


Particle에 mVel을 선언하고 Random하게 값을 설정한다.



update 시 vector에 더해주면 particle은 random한 속도록 이동하다 설정한 age가 되면 사라진다.


같은 속도로 사라지기 전까지 움직이는 particle을 조정하기 위해서 속도를 점점 줄이게 변화 시킬수 있다. update할때마다 1.0보다 작은 값을 mVel 에 곱하므로써 속도가 점점 줄도록 하는 방법이다. mDecay라는 변수를 설정하고 1보다 작은 값을 random하게 준다. 서서히 속도를 줄이고 싶으면 1에 근접한 값을 생성하면 된다.



update는 다음과 같이 변경한다.


여기까지 실행하면 속도가 점점 줄어들면서 particle은 사라진다. 이제 마지막 효과를 더해보자. Particle은 나이가 들면서 점점 작아지면서 살아지는 효과다. 서서히 사라지는 fade out 효과를 줄 수 있다. 

update 항목에 다음과 같이 추가하면 효과를 줄 수 있다.








Posted by 빨간 양말