###### tags: 期中報告
# 期中報告-自畫像 吳岳軒 教科1A 410730732
老師好,我的將我的作品分成5個系統,
分別是
1.模式系統(操控運動模式)
2.背景系統(動態隨機)
3.顯示系統(當下模式與滑鼠位置)
4.臉部系統(臉部組織與變形)
5.作動系統(跟隨游標或跳動)
作品連結:https://openprocessing.org/sketch/1358857
## 1.模式系統(操控運動模式)
分為
(以滑鼠點擊切換)
MODE1跟隨滑鼠以50%靈敏度移動
```javascript=
map(mouseX,0,windowWidth,windowWidth/4,windowWidth/4*3)
```
MODE2跳動反彈
```javascript=
fx=fx+random(2,10)
fy=fy+yc
yc=yc+random(0.7,0.9)
if (fy>height){yc=-yc}
```
## 2.背景系統(動態隨機)
```javascript=
function draw() {
//每張背景覆蓋刷新
background(24, 78, 119)
var count=0
for (var x = 0;x<width;x+=50){
for (var y =0;y<height;y+=50){
count=count+1
if (count%random(4,6)<random(1,3)){
fill(random(26,30),random(96,117),random(145,159))
rect(x,y,40)
if(random()<0.5){
fill(0)
stroke(217, 237, 146)
ellipse(x+20,y+20,20)
if(random()<0.5){
fill(random(22,52),random(138,160),random(164,173))
stroke(random(181,217),random(228,237),random(140,146))
ellipse(x+20,y+20,10)
}
}
}
}
}
```
## 3.顯示系統(當下模式與滑鼠位置)
```javascript=
var s = second();
var m = minute()
var h = hour()
var angleS = map(s,0,60,0,PI*2)
var angleM = map(m,0,60,0,PI*2)
var angleH = map(h,0,12,0,PI*2)
fill(82, 182, 154)
arc(width/2, height/2, 500, 500,-PI/2, angleS-(PI/2), PIE);
fill(118, 200, 147)
arc(width/2, height/2, 300, 300,-PI/2, angleM-(PI/2), PIE);
fill(153, 217, 140)
arc(width/2, height/2, 150, 150,-PI/2, angleH-(PI/2), PIE);
fill(181, 228, 140)
noStroke()
textSize(30)
fill(255)
text('[模式1跟隨/2跳動] '+mode+
' [滑鼠位置寬] '+mouseX+
' [滑鼠位置高] '+mouseY,150,550)
```
## 4.臉部系統(臉部組織與變形)
使用
(facex,facey)MOED1、(fx,fy)MODE2
```javascript=
//臉部元件
// 頸部
fill('#9A8C98')
beginShape()
curveVertex(facex,facey+40)
curveVertex(facex-8,facey+45)
curveVertex(facex-24+random(-2,0),facey+110)
curveVertex(facex-30+random(-30,0),facey+130)
curveVertex(facex+random(-25,25),facey+170)
curveVertex(facex+30+random(0,30),facey+130)
curveVertex(facex+24+random(0,2),facey+110)
curveVertex(facex+8,facey+45)
endShape(CLOSE)
//臉餅
fill('#C9ADA7')
ellipse(facex,facey,100, 150)
//鼻樑
fill('#4a4e69')
triangle(facex,facey-15,facex-5,facey+27,facex+5,facey+27,)
// 眼睛
fill(random(55,150),125,255)
rect(facex-35,facey-20,30,20,10)
fill(125,random(55,150),255)
rect(facex+5,facey-20,30,20,10)
fill('#F2E9E4')
ellipse(facex,facey+40,20+random(-10,20),5+random(0,15))
```
做中心綁定中央位置,使整體能一起移動
## 5.作動系統(跟隨游標或跳動)
在人臉出界時,會回到初始位置,使得繼續執行
```javascript=
if( fx > windowWidth ){
fx = 50
fy = 50
}
```
下為完整程式碼
```javascript=
function setup() {
createCanvas(windowWidth, windowHeight)
background(24, 78, 119)
}
var fx = 50
var fy = 50
var yc = 0
var mode = 1
var ang =0
function mousePressed(){
mode++ // 每次點擊滑鼠,狀態計數就加 1
if (mode>2){
mode=1 // 如果計數超過 2 就切換回 1
}
}
function draw() {
//每張背景覆蓋刷新
background(24, 78, 119)
var count=0
for (var x = 0;x<width;x+=50){
for (var y =0;y<height;y+=50){
count=count+1
if (count%random(4,6)<random(1,3)){
fill(random(26,30),random(96,117),random(145,159))
rect(x,y,40)
if(random()<0.5){
fill(0)
stroke(217, 237, 146)
ellipse(x+20,y+20,20)
if(random()<0.5){
fill(random(22,52),random(138,160),random(164,173))
stroke(random(181,217),random(228,237),random(140,146))
ellipse(x+20,y+20,10)
}
}
}
}
}
var s = second();
var m = minute()
var h = hour()
var angleS = map(s,0,60,0,PI*2)
var angleM = map(m,0,60,0,PI*2)
var angleH = map(h,0,12,0,PI*2)
fill(82, 182, 154)
arc(width/2, height/2, 500, 500,-PI/2, angleS-(PI/2), PIE);
fill(118, 200, 147)
arc(width/2, height/2, 300, 300,-PI/2, angleM-(PI/2), PIE);
fill(153, 217, 140)
arc(width/2, height/2, 150, 150,-PI/2, angleH-(PI/2), PIE);
fill(181, 228, 140)
noStroke()
textSize(30)
fill(255)
text('[模式1跟隨/2跳動] '+mode+
' [滑鼠位置寬] '+mouseX+
' [滑鼠位置高] '+mouseY,150,550)
if(mode == 1){
//1.物體XY變數設定
var facex = map(mouseX,0,windowWidth,windowWidth/4,windowWidth/4*3)//移動系統X
var facey = map(mouseY,0,windowHeight,windowHeight/4,windowHeight/4*3)//移動系統Y
//臉部元件
fill('#9A8C98')
beginShape()
curveVertex(facex,facey+40)
curveVertex(facex-8,facey+45)
curveVertex(facex-24+random(-2,0),facey+110)
curveVertex(facex-30+random(-30,0),facey+130)
curveVertex(facex+random(-25,25),facey+170)
curveVertex(facex+30+random(0,30),facey+130)
curveVertex(facex+24+random(0,2),facey+110)
curveVertex(facex+8,facey+45)
endShape(CLOSE)
fill('#C9ADA7')
ellipse(facex,facey,100, 150)
fill('#4a4e69')
triangle(facex,facey-15,facex-5,facey+27,facex+5,facey+27,)
fill(random(55,150),125,255)
rect(facex-35,facey-20,30,20,10)
fill(125,random(55,150),255)
rect(facex+5,facey-20,30,20,10)
fill('#F2E9E4')
ellipse(facex,facey+40,20+random(-10,20),5+random(0,15))
}else{//點擊反彈跳
fx=fx+random(2,10)
fy=fy+yc
yc=yc+random(0.7,0.9)
if (fy>height){yc=-yc}
fill('#9A8C98')
beginShape()
curveVertex(fx,fy+40)
curveVertex(fx-8,fy+45)
curveVertex(fx-24+random(-2,0),fy+110)
curveVertex(fx-30+random(-30,0),fy+130)
curveVertex(fx+random(-25,25),fy+170)
curveVertex(fx+30+random(0,30),fy+130)
curveVertex(fx+24+random(0,2),fy+110)
curveVertex(fx+8,fy+45)
endShape(CLOSE)
fill('#C9ADA7')
ellipse(fx,fy,100, 150)
fill('#4a4e69')
triangle(fx,fy-15,fx-5,fy+27,fx+5,fy+27,)
fill(random(55,150),125,255)
rect(fx-35,fy-20,30,20,10)
fill(125,random(55,150),255)
rect(fx+5,fy-20,30,20,10)
fill('#F2E9E4')
ellipse(fx,fy+40,20+random(-10,20),5+random(0,15))
if( fx > windowWidth ){
fx = 50
fy = 50
}
}
}
```