int width = 300; int height = 300; int frame = 0; int flakeCount = 0; int maxflakes = 1024; Flake[] flakes = new Flake[maxflakes]; void setup() { noStroke(); size(width, height); framerate(10); } void draw() { background(0); if (frame++ % 8 == 0) { addFlake(); } for (int i = 0; i < flakeCount; ++i) { flakes[i].draw(); flakes[i].x += 1; } ++frame; } void addFlake() { if (flakeCount < (maxflakes - 1)) { Flake flake = new Flake(); flakes[flakeCount++] = flake; } } class Flake { float x; float y; float direction, speed; int age; float wobble; float size; public Flake() { x = random(width); y = 0; direction = 0; age = 0; speed = 1 + random(3); wobble = 1 + random(3); size = 5 + random(5); } public void move() { float hyp = speed; float opp = sin(direction) * hyp; float adj = cos(direction) * hyp; float newx = x + opp; float newy = y + adj; x = newx; y = newy; } public void draw() { float foo = 2 * sin((PI / 4) * age++); float x1 = x + sin(direction + PI / wobble) * foo; float y1 = y + cos(direction + PI / wobble) * foo; fill((size / 10) * 128 + 127); ellipse(x1, y1, size, size); move(); } }