ArrayList drops = new ArrayList(); void setup(){ size(500,500); noStroke(); } float force ; void mousePressed(){ force = 1; } void draw(){ background(128,128,255); if(mousePressed){ if(force < 4) force += .1; for(int i = 0; i < force; i++){ drops.add(new Drop()); } } else { force = 0; } ArrayList toRemove = new ArrayList(); for(Drop d : drops){ if(! d.move()){ toRemove.add(d); } d.draw(); } drops.removeAll(toRemove); // new Drop().draw(); } class Drop { float sz = random(2,10); float x,y,xs,ys; Drop(){ x = 250; y = 500; float a = atan2(mouseY - y,mouseX - x); a+= random(-.1,.1); float d = dist(mouseX,mouseY,x,y)/random(45,55); xs = cos(a)*d; ys = sin(a)*d; } boolean move(){ x += xs; y += ys; ys += .1; if(y > 550) return false; return true; } void draw(){ float d = dist(x,y,250,500); float cd = map(d,0,500,-8,10); if(cd >= 0 && cd <=7){ if(cd < 1) fill(143,0,255,64); else if(cd < 2) fill(75,0,140,64); else if(cd < 3) fill(0,0,255,64); else if(cd < 4) fill(0,255,0,64); else if (cd < 5) fill(255,255,0,64); else if (cd < 6) fill (255,127,0,64); else if (cd < 7) fill(255,0,0,64); else fill(255,64); } else fill(255,64); ellipse(x,y,sz*random(.8,1.2),sz*random(.8,1.2)); } }