パーティクルを使って、こういうことをしてみた。
部分的に背景処理をあえてやめてみたらどうなるか、、、と思ったけど結果が微妙だったので、いろんなこと試して、設定をブン曲げてこういう投稿に。
int NUM = 300;
PVector[] p = new PVector[NUM];
PVector[] force = new PVector[NUM];
PVector[] acceleration = new PVector[NUM];
PVector[] velocity = new PVector[NUM];
PVector[] gravity = new PVector[NUM];
PVector[] min = new PVector[NUM];
PVector[] max = new PVector[NUM];
float[] mass = new float[NUM];
float friction;
void setup() {
size(200,800);
background(255);
smooth();
for(int i = 0 ; i < NUM;i++){
p[i] = new PVector(width/2,100);
velocity[i] = new PVector(random(-5,5),random(-10));
force[i] = new PVector(random(-1,1),random(-5,5));
min[i] = new PVector(0.0,0.0);
max[i] = new PVector(width,height);
gravity[i] = new PVector(0.0,random(1,1.5));
mass[i] = random(0.8);
friction = 0.01;
acceleration[i] = force[i].mult(mass[i]*5);
}
}
void draw() {
noStroke();
for(int i = 0 ; i < NUM;i++){
acceleration[i].add(gravity[i]);
velocity[i].add(acceleration[i]);
velocity[i].mult(1.0-friction);
p[i].add(velocity[i]);
acceleration[i].set(0,0);
fill(30,30);
ellipse(p[i].x,p[i].y,mass[i]*10,mass[i]*10);
if( p[i].x < min[i].x){
p[i].x = min[i].x + p[i].x;
velocity[i].x *= -1;
}
if(p[i].x > max[i].x){
p[i].x = max[i].x;
velocity[i].x *= -1;
}
if( p[i].y < min[i].y){
p[i].y = min[i].y + p[i].y;
velocity[i].y *= -1;
}
if(p[i].y > max[i].y){
p[i].y = max[i].y;
velocity[i].y *= -1;
}
}
}