// Dartmouth CS 2, Winter 2009, Chris Bailey-Kellogg // Notes 16 | Sketch 5 // The array of screen grabs PImage[] frames = new PImage[100]; // Which frame we're currently looking at int currentFrame = 0; // How many frames of the array have actually been drawn int numFrames = 0; // Whether cycling through the drawn frames, or drawing them boolean play = false; // Let the user control the frame rate int fr=10; void setup() { size(400,400); smooth(); strokeWeight(4); background(0); stroke(255); fill(255); textFont(loadFont("Kartika-24.vlw")); text(0,0,height); // start on 0th frame } void draw() { if (play) { // Cycle through drawn frames if (numFrames > 0) { image(frames[currentFrame],0,0); currentFrame = (currentFrame+1)%numFrames; } } else if (mousePressed) // Draw in the window line(mouseX,mouseY,pmouseX,pmouseY); } void keyPressed() { if (key=='f') { // forward one frame if (!play) { // Save the current frame frames[currentFrame] = get(); if (currentFrame < frames.length) currentFrame++; if (currentFrame > numFrames) { // Totally new frame numFrames++; background(0); } else { // Drawing over an existing frame -- show it image(frames[currentFrame],0,0); } text(currentFrame,0,height); // indicate the frame } } else if (key=='b') { // back one frame if (!play && currentFrame > 0) { // Save the current frame frames[currentFrame] = get(); currentFrame--; // Show the previous frame image(frames[currentFrame],0,0); } } else if (key=='p') { // start/stop playing if (play) { // now stop play = false; frameRate(60); // standard rate while drawing } else { // now start play = true; frameRate(fr); // user-defined rate while playing // Save the current frame frames[currentFrame] = get(); if (currentFrame < frames.length && currentFrame == numFrames) numFrames++; } } else if (key=='r') { // slow down if (fr > 2) { fr--; if (play) frameRate(fr); } } else if (key=='R') { // speed up fr++; if (play) frameRate(fr); } }