void setup() { size(300, 300); noStroke(); ellipseMode(CENTER_DIAMETER); //framerate(15); } float x1= 0, x2= 0, z1= 0, i= 0, sgn1= 1, sgn2= 1.5, sgn3= 0, s; void loop() { background(100); push(); translate(x1, 185, z1); noStroke(); fill(40, 100); rotateX(PI/2); ellipse(0, 22, -5*abs(sin(i))+32, -5*abs(sin(i))+32); pop(); s= 15*abs(sin(i+PI/80))+5; if(s<5.6){ sgn3= random(-2, 2); } push(); translate(0, 0, z1); fill(190, 0, 100); stroke(0); ellipse(x1, -80*abs(sin(i))+180, 40, 2*s); pop(); push(); translate(x2, 250); rotateY(0.5*sin(10*i)); fill(255); stroke(0); box(40); pop(); if(x1>280) { x1= 280; sgn1*= -1; } else { if(x1<20){ x1*= 20; sgn1*=-1; } else{ x1+= sgn1; } } if(x2>280) { x2= 280; sgn2*= -1; } else { if(x2<20){ x2= 20; sgn2*=-1; } else{ x2+= sgn2; } } if(z1>0) { z1= 0; sgn3*= -1; } else { if(z1<-250){ z1= -250; sgn3*=-1; } else{ z1+= sgn3; } } i+=PI/(width/8); }