1.week14_1_draw_lines_void_mouseDragged_mouseButton_LEFT_RIGHT
/// week14_1_draw_lines_void_mouseDragged_mouseButton_LEFT_RIGHT void setup(){ size(500, 500); } int x = -1, y = -1; void draw(){ if(x != -1){ ellipse(x, y, 1, 1); y++; //往下滴 (x,y)座標中, y慢慢變大,就是往下滴的感覺 } } void mouseDragged(){ if(mouseButton==LEFT) line(mouseX, mouseY, pmouseX, pmouseY); if(mouseButton==RIGHT){ x = mouseX; y = mouseY; } }
2.week14_02_draw_lines_loadPixels_pixels_updatePixels
// week14_02_draw_lines_loadPixels_pixels_updatePixels void setup(){ size(500,500); background(255); //背景設成白色 } void draw(){ //pixels } void mouseDragged(){ if(mouseButton==LEFT){ //在左鍵dragged拖曳時 line(mouseX, mouseY, pmouseX, pmouseY); //本來的線,是灰黑色,不是白色 loadPixels(); //取出畫面的像素 //println(pixels[0]); //白色是-1 其實是 color(255,255,255,255) for(int i=0; i < width*height; i++){ //全部的點,都去尋一下色彩 if(pixels[i] != -1) pixels[i] = color(random(255),random(255),random(255)); } //如果[不是白色]就是有畫圖碰到的pixels,都變成亂數的彩色 updatePixels(); //若有修改,要再放回去 } }
3.week14_03_draw_lines_rain_PImage_createImage_img_loadPixels_pixels_updatePixels// week14_03_draw_lines_rain_PImage_createImage_img_loadPixels_pixels_updatePixels PImage img; void setup(){ size(500,500); img = createImage(500, 500, RGB); //用來畫圖的畫布 img.loadPixels(); for(int i=0; i<500*500; i++) img.pixels[i] = color(#FFFFF2); // -14 img.updatePixels(); } int x = 250, y = 0; void draw(){ background(img); ellipse(x, y, 20, 20); if(y<498 && img.pixels[x+y*500]==-14) y++; } void mouseDragged(){ background(img); line(mouseX, mouseY, pmouseX, pmouseY); loadPixels(); img.loadPixels(); for(int i=0; i<500*500; i++) img.pixels[i] = pixels[i]; //把畫面的色彩,搬到img裡 img.updatePixels(); updatePixels(); }
4.week14_04_draw_lines_rain_ArrayList_PVector_p_pp// week14_04_draw_lines_rain_ArrayList_PVector_p_pp PImage img; void setup(){ size(500,500); img = createImage(500, 500, RGB); } // 換黑背景, 可用mouse刮出彩色的線條 //int x = 250, y = 0; ArrayList<PVector> p = new ArrayList<PVector>(); //很多個點p void draw(){ background(img); for(PVector pp : p){ ellipse( pp.x, pp.y, 20, 20); //if(y<498 && img.pixels[x+y*500]==-16777216) y++; if(pp.y<498 && img.pixels[int(pp.x)+int(pp.y)*500]==-16777216) pp.y++; } } void mouseDragged(){ background(img); stroke( random(255), random(255), random(255) ); line(mouseX, mouseY, pmouseX, pmouseY); loadPixels(); img.loadPixels(); for(int i=0; i<500*500; i++) img.pixels[i] = pixels[i]; img.updatePixels(); updatePixels(); for(PVector pp : p){ ellipse(pp.x, pp.y, 20, 20); } } void mousePressed(){ if(mouseButton==RIGHT){ p.add( new PVector(mouseX, mouseY)); } }
5.week14_05_draw_lines_myFloodFill_x_y_c1_c2_pixels_isOK// week14_05_draw_lines_myFloodFill_x_y_c1_c2_pixels_isOK void setup(){ size(500, 500); background(#FFFFF2); //先畫淡黃色背景 } void draw(){ if(mousePressed && mouseButton==LEFT) line(mouseX, mouseY, pmouseX, pmouseY); if(mousePressed && mouseButton==RIGHT){ loadPixels(); //把畫面,讀入 pixels[]陣列裡 color c1 = pixels[mouseX+mouseY*500]; //原本色彩 c1 color c2 = color(random(255), random(255), random(255)); //亂數挑色彩 myFloodFill(mouseX, mouseY, c1, c2); //色彩不同,才做填色功能 updatePixels(); //把陣列的值,放回畫面 } } boolean isOK(int x, int y, color c){ if(x<0 || y<0 || x>=500 || y>=500) return false; //超過邊界 不能做 if(pixels[x+y*500]!=c) return false; //色彩原本的c1色彩不同,就不要變色 return true; } void myFloodFill(int x, int y, color c1, color c2){ pixels[x+y*500] = c2; //這1格,設成新色彩 if(isOK(x+1,y,c1)) myFloodFill(x+1,y,c1,c2); //試試右邊,色彩對嗎? 對就做 if(isOK(x-1,y,c1)) myFloodFill(x-1,y,c1,c2); //試試左邊,色彩對嗎? 對就做 if(isOK(x,y+1,c1)) myFloodFill(x,y+1,c1,c2); //... if(isOK(x,y-1,c1)) myFloodFill(x,y-1,c1,c2); //... } //不要點太大的區域,因為[函式呼叫函示]太多層,會被警告出錯
6.week14_06_cute_cursor// week14_06_cute_cursor void setup(){ size(500, 500); PImage img = loadImage("kitty.png"); cursor(img); } void draw(){ background(#FFFFF2); }
7.week14_07_cute_cursor_kitty_cursor// week14_07_cute_cursor_kitty_cursor PImage imgCute, imgKitty; void setup(){ size(500, 500); imgCute = loadImage("cute.png"); imgKitty = loadImage("kitty.png"); cursor(imgKitty); } void draw(){ background(#FFFFF2); if(frameCount%120==0) cursor(imgCute); if(frameCount%120==60) cursor(imgKitty); }
8.week14_08_big_cursor_imageMode_image_imageMode// week14_08_big_cursor_imageMode_image_imageMode // 希望不只用 16x16 或 32x32 要更大 PImage imgBigCute, imgBigKitty, imgCursor; void setup(){ size(500, 500); imgBigCute = loadImage("bigcute.pmg"); imgBigKitty = loadImage("bigkitty.png"); imgCursor = imgBigKitty; } void draw(){ background(#FFFFF2); imageMode(CENTER); //畫圖的系統,改成以正中心的座標 image(imgCursor, mouseX, mouseY); imageMode(CORNER); //畫圖的系統,改成以左上角的座標 if(frameCount%120==0) imgCursor = imgBigCute; if(frameCount%120==60) imgCursor = imgBigKitty; }
沒有留言:
張貼留言