//////////////////////////////////////////////////////////////////////////////////// // Interactive Drawing : Froggy // // Froggy is hanging out on a lotus leaf // // A little fly flew by the river // // Froggy spent day and night to catch the fly // // By: Wun Richard Hui // //////////////////////////////////////////////////////////////////////////////////// void setup() { size (400, 400); // set frame size to 400x400 frameRate(60); // set frame rate to 60 fps noStroke(); // set shapes to have no outline noCursor(); // set mouse cursor to invisible } void draw() { //////////////////////////////////////////////////////////////////////////////////// // Background // // 5 shapes // //////////////////////////////////////////////////////////////////////////////////// /*mouseX, mouseY functions are used to create day&night effects on sky&water // //sin(), cos() and frameCount are used to create an inifinite count // //***Day&Night animation is the hardest part of the whole project */ //////////////////////////////////////////////////////////////////////////////////// // Sky fill(255-80*(sin(frameCount*0.01)+1), 255-60*(sin(frameCount*0.01)+1), 180+30*(sin(frameCount*0.01)+1)); rect(0, 0, 400, 160); //Value check device //println((80*(sin(frameCount*0.01)+1))); // Sun fill(255, 255, 320-(210*sin(frameCount*0.01))); ellipse((cos(frameCount*0.01))*200+180, 150 -100*sin((frameCount)*0.01) , 60, 60); // Moon fill(255, 150-(110*sin(frameCount*0.01)), 10); ellipse(cos(frameCount*0.01+PI)*200+180, 150 +100*sin((frameCount+QUARTER_PI)*0.01) , 60, 60); // Water fill(155, 255-(35*(sin(frameCount*0.01)+1)), 255); // Change background color into light blue rect(0, 160, 400, 400); curve(0+100*(sin(frameCount*0.1)), 400+100*(sin(frameCount*0.01)), -50, 160, 450, 160, 400+100*(sin(frameCount*0.05)), 400+100*(sin(frameCount*0.05))); // Lotus_leaf fill(0, 255, 100); // Change color to light green arc(200, 220, 280-mouseY*0.1-10*cos(frameCount*0.1), 100+mouseY*0.05+2*sin(frameCount*0.1), 0, (PI*1.9)); // further interaction between Froggy&Leaf movements // arc & pi is used to create the indent on the leaf ///////////////////////////////////////////////////////////////////////////////////// // Froggy // // 23 shapes // ///////////////////////////////////////////////////////////////////////////////////// //**mouseX, mouseY functions are used to animate Froggy into a more lively creature// ///////////////////////////////////////////////////////////////////////////////////// // Body (A) fill(55, 220, 75); // change skin color to dark green ellipse(210- (mouseX*0.03), 200, 150, 100); // BackLeg_1 (B2) fill(25, 220, 25); // change skin color to dark green triangle(175, 250, 125, 230, 175, 175); // BackLeg_2 (B3) fill(105, 220, 105); // change skin color to dark green triangle(225, 175, 225, 250, 275, 235); // Belly (B1) //cos() function is used to create movements fill(240, 220, 200); // change color to light orange ellipse(200- (mouseX*0.02), 200- (mouseY*0.01), 40, 75+2*(cos(frameCount*0.5))); // Toe (C1) fill(255, 225, 200); // change color to light orange ellipse(130, 230, 18, 15); // Toe (C2) fill(255, 225, 200); // change color to light orange ellipse(270, 235, 18, 15); // FrontLeg_1 (D1) fill(75, 220, 75); // change skin color to dark green triangle(175- (mouseX*0.02), 175- (mouseY*0.02), 175, 275, 120, 260); // FrontLeg_2 (D2) fill(105, 220, 105); // change skin color to dark green triangle(225- (mouseX*0.02), 175- (mouseY*0.02), 230, 275, 275, 260); // Toe_Front1 (E) fill(255, 225, 200); // change color to light orange ellipse(130, 260, 22, 15); // Toe_Front2 (E) fill(255, 225, 200); // change color to light orange ellipse(150, 265, 28, 15); // Toe_Front3 (E) fill(255, 225, 200); // change color to light orange ellipse(170, 270, 30, 15); // Toe_Front4 (E) fill(255, 225, 200); // change color to light orange ellipse(275, 260, 22, 15); // Toe_Front5 (E) fill(255, 225, 200); // change color to light orange ellipse(255, 265, 28, 15); // Toe_Front6 (E) fill(255, 225, 200); // change color to light orange ellipse(235, 270, 30, 15); // Head (C5) fill(75, 220, 75); // change skin color to dark green ellipse(200- (mouseX*0.01), 150- (mouseY*0.01), 130, 85); // Jaw (E1) //cos() function is used to animate the throb of Froggy fill(255, 235, 200); // change color to light orange ellipse(200- (mouseX*0.01), 180- (mouseY*0.01), 80, 50+10*(cos(frameCount*0.5) ) ); // Eye_1 (E2) fill(255, 225, 200); // change color to light orange ellipse(170, 120, 30, 70); // Eye_2 (E3) fill(255, 225, 200); // change color to light orange ellipse(230, 120, 30, 70); // Eyeball_1 (F1) fill(0); // change color to black ellipse(160+ (mouseX *0.05), 100+ (mouseY *0.10), 10, 33); // Eyeball_2 (F2) fill(0); // change color to black ellipse(220+ (mouseX *0.05), 100+ (mouseY *0.10), 10, 33); // Nose (G) fill(75, 220, 75); // change skin color to light green ellipse(200, 150, 75, 50); ///////////////////////////////////////////////////////////////////////////////////// // Fly // // 3 shapes // ///////////////////////////////////////////////////////////////////////////////////// //**mouseX & mouseY are used to adjust the size of Fly to create depth // //sin() was used in opacity to create illustion of flapping wings // ///////////////////////////////////////////////////////////////////////////////////// // Wings (H1) fill(200, 255*(sin(2*frameCount)+1)); ellipse( mouseX -mouseY*0.13, mouseY, mouseY*0.3, mouseY*0.5-mouseY*0.3); ellipse( mouseX +mouseY*0.13, mouseY, mouseY*0.3, mouseY*0.5-mouseY*0.3); // Body (I) fill(0); ellipse( mouseX, mouseY+(1+mouseY*0.03), mouseY*0.15, mouseY*0.15); } ///////////////////////////////////////////////////////////////////////////////////// // Froggy's interaction // // 2 shapes // ///////////////////////////////////////////////////////////////////////////////////// void mousePressed() { // When mouse is pressed, Froggy will shoot its tongue frameRate(10); fill(255, 80, 0); triangle(175, 170, 225, 170, mouseX, mouseY); ellipse(mouseX, mouseY, mouseY*0.2, mouseY*0.2); } void mouseReleased() { frameRate(60); } ////////////////////////////////////////////////////////////////////////////////////// // References // ////////////////////////////////////////////////////////////////////////////////////// // These artworks are referenced below to show credit on learning new ways to // //call a function or value to show visual effects, such as, depth and animations // ////////////////////////////////////////////////////////////////////////////////////// //Moving background (use of sin/cos/tan) //http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-drawing/interactive_drawing_27/index.html //Moving eyes (use of mouseX/mouseY) //http://www-acad.sheridanc.on.ca/PROG14998/lab-01/lab_01_33/index.html //Mouse Click (use of frameRate) //http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/ivy_zhao_interactive_drawing/index.html //Mouse Click (use of mouseReleased) //http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/calvin_leveille_interactive_drawing/index.html //No Cursor (use of noCursor) //http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-drawing/interactive_drawing_20/index.html //Dropping rain (discarded idea for rain effects) //http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-drawing/interactive_drawing_02/index.html //Unit collision interaction (discarded idea for fly interaction) //http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-drawing/interactive_drawing_56/index.html