# 【TEST】單元一:程式框架 p5 js 開發入門 ###### tags: `互動藝術程式創作入門` :::info :open_file_folder: **作業** 1. setup 與 draw 有什麼不一樣,個別執行的時機跟作用是什麼? 2. 要如何改變視窗的大小呢? 3. background() 裡面可以使用哪些參數,試著從文件中找找看 4. 希望有按下滑鼠的時候,才根據滑鼠的位置改變顏色要怎麼做到呢? 5. 如果我想要改變先前軌跡變淡的速度,要怎麼做呢? 6. 從 openprocessing, pinterest, 或是 codepen 之類的平台找幾個覺得有趣的作品,並試著分析ㄧ下他是怎麼做的吧🤩 ::: ## 1. setup 與 draw 有什麼不一樣,個別執行的時機跟作用是什麼? setup 比較像是初始值,通常會在這裡設定畫布尺寸、畫布的背景顏色等,程式會先執行 setup 的設定;程式執行完 setup 後,就會循環執行 draw 的內容,因此我們能將希望動態呈現的物件放在 draw 內,產生動畫效果。 ## 2. 要如何改變視窗的大小呢? 改變 setup 中的 `createCanvas(w, h)` 數值,w 數值代表寬度,h 數值代表高度。 ![](https://i.imgur.com/kHsYep9.jpg) ```javascript //w=500, h=500 function setup() { createCanvas(500, 500); background(255); } function draw() { } // w=800. h=500 function setup() { createCanvas(800, 500); background(255); } function draw() { } ``` ## 3. background() 裡面可以使用哪些參數,試著從文件中找找看 * background(color) * background(colorstring, [a]) * background(gray, [a]) * background(v1, v2, v3, [a]) * background(values) * background(image, [a]) > - [a] 代表透明度 > - background(image, [a]) 要搭配 `loadImage()` 或 `createImage()` 使用 ```javascript // color value and object background(51); // grayscale background(255, 204, 0); // RGB background(color(0, 0, 255)); // color object // HSB 數值 colorMode(HSB); background(255, 204, 100); // colorstring background('red'); // color-name background('#fae'); // 3-digit Hex background('#222222'); // 6-digit Hex background('rgb(0,255,0)'); // RGB background('rgba(0,255,0, 0.25)'); // RGB with opacity background('rgb(100%,0%,10%)'); // RGB by percentage background('rgba(100%,0%,100%,0.5)'); // RGB with opacity by percentage ``` ## 4. 希望有按下滑鼠的時候,才根據滑鼠的位置改變顏色要怎麼做到呢? <iframe src="https://www.openprocessing.org/sketch/877927/embed/" width="700" height="700"></iframe> ## 5. 如果我想要改變先前軌跡變淡的速度,要怎麼做呢? 改變背景透明度,越透明則軌跡變淡的速度越慢,越不透明則軌跡變淡的速度越快。 <iframe src="https://www.openprocessing.org/sketch/877944/embed/" width="700" height="700"></iframe> ## 6. 從 openprocessing, pinterest, 或是 codepen 之類的平台找幾個覺得有趣的作品,並試著分析ㄧ下他是怎麼做的吧 在 OpenProcessing 找到 [Type_ABCDe Studios](https://www.openprocessing.org/sketch/831208) 作品,覺得像是廣告看板,有點可愛。裡面運用了以下元素,搭配 for 迴圈讓字體重複出現,並在固定的範圍內移動。 - 製作立面方塊:`box()` - 在立體面放入圖樣:`createGraphics()` - 旋轉:`rotateX()`、`rotateY()` - 使用字體:載入字體檔`loadFont()`、調整字體的`text()`與`textSize()`、渲染字體`texture()` 因為原作品寫 for 迴圈的方式用了 `sin()`,這部分的寫法我還沒搞懂,在嘗試製作後,改讓旋轉的立面方塊內文字跟著設定好範圍的 X 軸與 Y 軸隨機變動位置與大小,成為喧鬧的方塊XD <iframe src="https://www.openprocessing.org/sketch/877949/embed/" width="700" height="700"></iframe>