2017年10月16日 星期一

Week05*互動技術課堂筆記*



【利用Processing】


*做出轉動大眼睛*

基本應用介紹


1.1先用輔助線,找出眼睛一棟位置是否和滑鼠一樣













程式碼:

void setup(){
  size(400,400);  //視窗初始化大小
}
void draw(){
  background(128);
  strokeWeight(20);  //筆刷粗度大小
  ellipse(100,200,180,360);  //右眼睛
  ellipse(300,200,180,360);  //左眼睛
  
  ellipse(100,200,10,10);  //右眼珠
  ellipse(300,200,10,10);  //左眼珠
  line(mouseX,mouseY,100,200);  //畫一條線連結右眼睛
  line(mouseX,mouseY,300,200);  //畫一條線連結左眼睛
}

1.2去除輔助線,改用atan寫法














程式碼:
void setup(){
  size(800,800);
}
void draw(){
  background(128);
  strokeWeight(20);
  ellipse(100,200,180,360);
  ellipse(300,200,180,360);
  
  //ellipse(100,200,10,10);
  //ellipse(300,200,10,10);
  //line(mouseX,mouseY,100,200);
  //line(mouseX,mouseY,300,200);
  
  float angle1=atan2((mouseY-200)/2,mouseX-300); //角度=atan2(分子/分母)
  float newX1=300+100*cos(angle1)/2;  //右眼珠的X移動半徑大小
  float newY1=200+200*sin(angle1)/2;  //右眼珠的Y移動半徑大小

  ellipse(newX1,newY1,10,10);

  float angle2=atan2((mouseY-200)/2,mouseX-100);  //角度=atan2(分子/分母)
  float newX2=100+100*cos(angle2)/2;   //左眼珠的X移動半徑大小
  float newY2=200+200*sin(angle2)/2;    //左眼珠的X移動半徑大小

  ellipse(newX2,newY2,10,10);
}

2.射擊泡泡遊戲概念

2.1線可隨著滑鼠移動增長,球粘著滑鼠移動














程式碼:
void setup(){
  size(800,800);
}
void draw(){
  background(0,212,0);
  fill(#6ED1CB);ellipse(200,600,100,100);
  line(mouseX,mouseY,200,600);
  float angle=atan2(mouseY-600,mouseX-200);
  fill(#C47CC9);ellipse(200+50*cos(angle),600+50*sin(angle),30,30);
}

2.2可自由發射,當滑鼠移動,球會自動歸位














程式碼:
void setup(){
  size(400,800);
}
float ballX=200,ballY=600;
float ballVX=0,ballVY=0;
float angle=0;
void draw(){
  background(0,128,0);
  fill(#6ED1CB);ellipse(200,600,100,100);
  line(mouseX,mouseY,200,600);
  fill(#C47CC9);ellipse(ballX,ballY,30,30);
  angle=atan2(mouseY-600,mouseX-200);
  
  ballX+=ballVX;
  ballY+=ballVY;
}
void mouseMoved(){
  ballX=200+50*cos(angle);
  ballY=600+50*sin(angle);
}
void mousePressed(){
  ballVX=cos(angle);
  ballVY=sin(angle);
}






程式碼:
void setup(){
  size(400,800);
}
float [] ballX=new float[10];  //初始化設定X軸10顆球
float [] ballY=new float[10];  //初始化設定Y軸10顆球
float [] ballVX=new float[10];  //初始化設定X軸10個球的速度
float [] ballVY=new float[10];  //初始化設定Y軸10個球的速度
float [] angle=new float[10];  // 初始化設定10顆球的角度
int now=0;  //now which ball is it
void draw(){
  background(0,128,0);
  fill(#6ED1CB);ellipse(200,600,100,100);
  for(int i=0;i<10;i++){
    fill(#C47CC9);ellipse(ballX[i],ballY[i],30,30);
    ballX[i]+=ballVX[i]; ballY[i]+=ballVY[i];
  }
  angle[now]=atan2(mouseY-600,mouseX-200);
}
void mouseMoved(){
  ballX[now]=200+50*cos(angle[now]); ballY[now]=600+50*sin(angle[now]);
}
void mousePressed(){
  ballVX[now]=cos(angle[now]); ballVY[now]=sin(angle[now]);
  now++;
}


2.3可自由發射,當滑鼠移動,球會自動歸位

沒有留言:

張貼留言