PFont font; Letter l; Letter ll; char k; ArrayList on = new ArrayList(); ArrayList off = new ArrayList(); float xspeed = 0.8; float yspeed = 1.9; void setup(){ size (500,500); textAlign(LEFT); font = loadFont("Bauhaus93-48.vlw"); textFont(font); l = new Letter(k,0,75); } void draw(){ background (255); fill(0); rect(0,80,150,10); rect(280,460,100,40); pushMatrix(); translate(80, 410); rotate(PI+PI/2); textSize(48); text ("TRAMPOLINE",0,0); popMatrix(); textSize(25); l.displayOn(); l.displayOff(); } void keyPressed(){ k = (char)key; l = new Letter(k,0,75); for (int i = on.size()-1; i >= 0; i--){ Letter ll = (Letter)(on.get(i)); ll.xPos = ll.xPos+20; if (ll.xPos >150 ){ on.remove(i); off.add(ll); } } on.add(l); } class Letter { char toBe; float xPos; float yPos; boolean flipped; Letter(char toBe, float xPos, float yPos){ this.toBe = toBe; this.xPos = xPos; this.yPos = yPos; this.flipped = false; } void displayOn (){ for (int i = 0; i < on.size(); i++){ l = (Letter )on.get(i); text (l.toBe,l.xPos, l.yPos); } } void displayOff(){ for (int i = 0; i < off.size(); i++){ l = (Letter )off.get(i); if (l.flipped == true){ l.xPos += xspeed; l.yPos -= yspeed; text(l.toBe, l.xPos, l.yPos); } else { l.xPos += xspeed; l.yPos += yspeed; if (l.yPos > 460){ l.flipped = true; } text(l.toBe, l.xPos, l.yPos); } } } }