顯示具有 08161035_游騰翔 標籤的文章。 顯示所有文章
顯示具有 08161035_游騰翔 標籤的文章。 顯示所有文章

2022年1月17日 星期一

期末最終成果

 我們的期末作業終於完成了,以下為程式碼

PImage img1,img2,img3,img4,img5,img6,img7,img8,img9,img10,img11,img12,img13,img14,img15,img16,img17,img18,img19,img20,img21,img22,img23,img24,img25,img26,img27,img28,img29,img30;

int remainT=0,state=0,score=0, i=0,now=0;

int []vegaAge={-1,-1,-1,-1};

void setup()

{

  size(500,700);

  img1=loadImage("background1.PNG");

  img2=loadImage("background2.PNG");

  img3=loadImage("background3.PNG");

  img4=loadImage("background4.PNG");

  img5=loadImage("background5.PNG");

  img6=loadImage("squirrel1.PNG");

  img7=loadImage("squirrel2.PNG");

  img8=loadImage("squirrel3.PNG");

  img9=loadImage("squirrel4.PNG");

  img10=loadImage("squirrel5.PNG");

  img11=loadImage("squirrel6.PNG");

  img12=loadImage("squirrel7.PNG");

  img13=loadImage("veg.PNG");

  img14=loadImage("letter.png");

  img15=loadImage("trip.png");

  img16=loadImage("white.png");

  img17=loadImage("back.png");

  img18=loadImage("vege1.png");

  img19=loadImage("vege2.png");

  img20=loadImage("vege3.png");

  img21=loadImage("vege4.png");

  img22=loadImage("vege5.png");

  img23=loadImage("garden.png");

  img24=loadImage("backk.png");

  img25=loadImage("travel.png");

  img26=loadImage("minus.png");

  img27=loadImage("plus.png");

  img28=loadImage("yes.png");

  img29=loadImage("home.png");

  img30=loadImage("222.png");

}


void draw()

{

  if(state==0)//首頁

  {

    if(remainT>=0)//用來做動畫

   {

      remainT++;

      if(remainT<10){image(img1,0,0,500,700);image(img6,100,450,500,350);}

      else if(remainT>10&&remainT<20){image(img2,0,0,500,700);image(img6,100,450,500,350);}

      else if(remainT>20&&remainT<30){image(img3,0,0,500,700);image(img7,100,450,500,350);}

      else if(remainT>30&&remainT<40){image(img4,0,0,500,700);image(img8,100,450,500,350);}

      else if(remainT>40&&remainT<50){image(img5,0,0,500,700);image(img9,100,450,500,350);}

      else if(remainT>50&&remainT<60){image(img1,0,0,500,700);image(img10,100,450,500,350);}

      else if(remainT>60&&remainT<70){image(img1,0,0,500,700);image(img11,100,450,500,350);}

      else if(remainT>70&&remainT<80){image(img1,0,0,500,700);image(img12,100,450,500,350);}

      else if(remainT>80)

      {

        remainT=0;

      }

    }

    image(img13,0,0,120,120);

    image(img15,120,0,120,120);

   }

   else if(state==1)//菜園

   {

      image(img23,0,0,500,700);

      image(img24,0,0,120,120);

      fill(0); textSize(80); image(img19,250,80,100,100);text(":"+score , 350, 150);  

      for(int i=0; i<4; i++){    

        if(vegaAge[i]<0){ image(img20,100+i*100, 500, 10,10);}//empty

        else if(vegaAge[i]<10){ image(img18, 50+i*100, 410, 150,150);}

        else if(vegaAge[i]<20){ image(img19, 50+i*100, 410, 150,150);}

        else  { image(img22, 50+i*100, 410, 150,150);}

        if(frameCount%6==0 && vegaAge[i]>=0) vegaAge[i]++; // 0,1,2.... 60=1秒

       }

   }

   else if(state==2)

   {

     image(img16,0,0,500,700);

     

   }

   else if(state==3)

   {

     image(img25,0,0,500,700);

     image(img24,0,0,120,120);

     image(img26,40,300,150,100);

     image(img27,300,300,150,100);

     image(img28,180,400,150,100);

     fill(0); textSize(100);text(i , 220, 390);

     image(img19,300,20,100,100);

      fill(0); textSize(100);text(":"+now , 400, 100);

   }

   else if(state==4)

   {

     image(img1,0,0,500,700);

     if(remainT>=0)

   {

      remainT++;

      if(remainT<10){image(img1,0,0,500,700);}

      else if(remainT>10&&remainT<20){image(img2,0,0,500,700);}

      else if(remainT>20&&remainT<30){image(img3,0,0,500,700);}

      else if(remainT>30&&remainT<40){image(img4,0,0,500,700);}

      else if(remainT>40&&remainT<50){image(img5,0,0,500,700);}

      else if(remainT>50&&remainT<60){image(img1,0,0,500,700);}

      else if(remainT>60&&remainT<70){image(img1,0,0,500,700);}

      else if(remainT>70&&remainT<80){image(img1,0,0,500,700);}

      else if(remainT>80)

      {

        remainT=0;

      }

    }

    image(img13,0,0,120,120);

    image(img29,120,0,120,120);

   }

   else if(state==5)

   {

     image(img23,0,0,500,700);

      image(img24,0,0,120,120);

      fill(0); textSize(80); image(img19,250,80,100,100);text(":"+score , 350, 150);  

      for(int i=0; i<4; i++){    

        if(vegaAge[i]<0){ image(img20,100+i*100, 500, 10,10);}//empty

        else if(vegaAge[i]<10){ image(img18, 50+i*100, 410, 150,150);}

        else if(vegaAge[i]<20){ image(img19, 50+i*100, 410, 150,150);}

        else  { image(img22, 50+i*100, 410, 150,150);}

        if(frameCount%6==0 && vegaAge[i]>=0) vegaAge[i]++; // 0,1,2.... 60=1秒

       }

   }

   else if(state==6)

   {

     image(img30,0,0,500,700);

     image(img28,180,400,150,100);

     image(img24,0,0,120,120);

   }

}

void mousePressed()

{

  if(state==0)

  {

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=1;

    }

    else if (mouseButton == LEFT&&dist(120,0, mouseX, mouseY)<=120)

    {

      state=3;

      i=0;

      now=score;

    }

  }

  else if(state==1)

  {

    if(mouseButton==LEFT){

    for(int i=0; i<4; i++){//空地才能種

      if( vegaAge[i]==-1 && dist(mouseX,mouseY, 100+i*100, 500) < 30 ) vegaAge[i]=0; 

    }

  }else if(mouseButton==RIGHT){//右鍵採收

    for(int i=0; i<4; i++){

      if(dist(mouseX,mouseY, 100+i*100, 500) < 50 ){ 

        if(vegaAge[i]<0) score+=0;//空地不能收

        else if(vegaAge[i]<10) score+=0;//baby

        else if(vegaAge[i]<20) score+=1;//child

        else score+=0;//bad!! too old

        vegaAge[i]=-1; 

        now=score;

      }

    }

  }

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=0;

    }

  }

  else if(state==3)

  {

    if (mouseButton == LEFT&&dist(115,350,mouseX, mouseY)<=25)

    {

      i--;

      now++;

      if(i<0)i=0;

      if(now>score)now=score;

    }

    else if (mouseButton == LEFT&&dist(375,350, mouseX, mouseY)<=25)

    {

      i++;

      now--;

      if(now<0)now=0;

      if(i>score)i=score;

    }

    else if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=0;

    }

    else if (mouseButton == LEFT&&dist(300,400, mouseX, mouseY)<=120)

    {

      if(i==0)state=3;

      else {

        score=now;

        state=4;

      }

    }

  }

  else if(state==4)

  {

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=5;

    }

    else if (mouseButton == LEFT&&dist(120,0, mouseX, mouseY)<=120)

    {

      state=6;

    }

  }

  else if(state==5)

  {

    if(mouseButton==LEFT){

    for(int i=0; i<4; i++){//空地才能種

      if( vegaAge[i]==-1 && dist(mouseX,mouseY, 100+i*100, 500) < 30 ) vegaAge[i]=0; 

    }

  }else if(mouseButton==RIGHT){//右鍵採收

    for(int i=0; i<4; i++){

      if(dist(mouseX,mouseY, 100+i*100, 500) < 50 ){ 

        if(vegaAge[i]<0) score+=0;//空地不能收

        else if(vegaAge[i]<10) score+=0;//baby

        else if(vegaAge[i]<20) score+=1;//child

        else score+=0;//bad!! too old

        vegaAge[i]=-1; 

        now=score;

      }

    }

  }

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=4;

    }

  }

  else if(state==6)

  {

    if (mouseButton == LEFT&&dist(300,400, mouseX, mouseY)<=120)

    {

      state=0;

    }

    else if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=4;

    }

  }

}





















作業心得:這學期我們學了很多有關Processing程式的寫法,我們的期末作業花了大約10小時來做,如果包含畫圖時間的話可能會更多,最後做出來的成果我覺得雖然還有待加強,但也是很有成就感。

2021年12月13日 星期一

2021年12月6日 星期一

week04

 今天一開始老師先教我們畫棋盤

先用簡單的line來畫出9條直線


之後我們可以使用for迴圈來簡化這個程式

再來只要把橫線的程式也加上去,就可以完成一個8*8的棋盤

之後第二節課我們先教陣列

就可以把陣列套進去剛剛的棋盤程式碼裡面

我們可以修改陣列裡面的值,去決定棋子該放在哪一格
只要把0改成1,他所對應的棋盤位置就會出現一個棋子
int [][]go={
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,1,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {1,1,0,0,0,0,0,0,0} };

void setup()
{
  size(500,500);
}
void draw()
{
  background(253,236,180);
  for(int i=0;i<9;i++){
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1){
        int x=50+50*j,y=50+50*i;
        fill(255);ellipse(x,y,40,40);
      }
    }
  }
}

之後只要加上mosuePressed就可以用滑鼠點擊放棋子了

int [][]go={
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,1,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {1,1,0,0,0,0,0,0,0} };

void setup()
{
  size(500,500);
}
void draw()
{
  background(253,236,180);
  for(int i=0;i<9;i++){
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1){
        int x=50+50*j,y=50+50*i;
        fill(255);ellipse(x,y,40,40);
      }
    }
  }
}
void mousePressed(){
  int j=(mouseX-50)/50;
  int i=(mouseY-50)/50;
  go[i][j]=1;
}

但是這樣有可能會因為系統無條件捨去導致滑鼠點擊位置與實際落子位置有所偏差
所以我們要稍微修改一下
把
void mousePressed(){
  int j=(mouseX-50)/50;
  int i=(mouseY-50)/50;
  go[i][j]=1;
裡面的mouseX-50改成mouseX-25
mouseY也是同理
這樣就可以讓棋子落子的位置更加精準

之後我們再更進階的加上mosueButton使用滑鼠的左右以及中鍵分別可以放白棋.黑棋以及消除棋子

再來我們學的是利用cos()及sin()畫出360個圓,每度都有1個小的圓

void setup(){
  size(500,500);
}
void draw(){
  for(float a=0;a<360;a++){
    float x=250+250*cos(radians(a));
    float y=250+250*sin(radians(a));
    ellipse(x,y,4,4);
  }
}
的作品

最後一節課老師跟我們講了一個可以看到很多人自己用Processing畫畫的網站OpenProcessing.org

可以看到很多人的作品

之後回到程式,我們可以加上mouse
移動滑鼠就可以改變圓的型態


void setup(){
  size(500,500);
}
void draw(){
  background(128);
  for(float a=0;a<360;a++){
    float x=250+mouseX*cos(radians(a));
    float y=250+mouseY*sin(radians(a));
    ellipse(x,y,mouseY,mouseY);
  } 
} 

void setup(){
  size(500,500);
}
float w=30;
float r=0,g=255,b=0;
void draw(){
  stroke(r,g,b);noFill();
    r+=random(3);if(r>255)r=0;
    g+=random(3);if(g>255)g=0;
    b+=random(3);if(b>255)b=0;
    ellipse(mouseX,mouseY,w,w);
    w+=0.5;
    if(w>100)w=30;
}




week09

這周開始老師要幫我們每組要做的遊戲都示範一次


老師講解俄羅斯方塊
小朋友下樓梯

小雞過馬路
弓箭傳說


2021年11月29日 星期一

week08

 今天我們就要開始想自己期末作業的主題了,然後老師今天要教我們做出gather town的小人能夠上下左右移動,以及能夠互動的鋼琴

我們的期末作業想要做類似旅行青蛙的小遊戲,我的組員是許宏君 08160296

我們可以使用sprite圖檔 讓畫面中的人物呈現出走路的動作 並且使用 keyPressed 及 keyCode 上下左右方向鍵來讓人物能夠轉動方向



PImage img;
void setup(){
  size(500,500);
  img=loadImage("img.jpg");
  imageMode(CENTER);
}
int a=0, b=0, x=250, y=250;
void draw(){
  background(255);
  //image( img, 0,0);
  image(  img.get(141*a, 211*b, 141,211), x,y);
  if(frameCount%30==0) a = (a+1)%4;
}
void keyPressed(){
  if(keyCode==RIGHT){ b=3; x++; }
  if(keyCode==LEFT) { b=2; x--; }
  if(keyCode==UP) { b=1; y--; }
  if(keyCode==DOWN){ b=0; y++; }
}



2021年11月22日 星期一

week07

 第一節課我們先畫出一個圓並且讓他從上方往下掉












然後我們進階一點 畫出兩個圓

並且讓他們的掉落速度不一樣


使用vx和vy可以調整兩個圓的掉落速度

float x=250,y=0,vx=0,vy=3;
float x2=150,y2=50,vx2=0,vy2=2;
void setup(){
  size(500,600);
}
void draw(){
  background(255);
  ellipse(x,y,50,50);
  ellipse(x2,y2,50,50);
  y=y+vy;  //vy是速度
  y2=y2+vy2;  //vy2是速度
}

再來就可以加上配合陣列的使用

製作更多圓形,而且每個掉落速度都不一樣



然後讓圓在碰到最下面之後能夠反彈回去


最後加上mouse碰到圓就可以得分(讓圓停下來)

//mouse碰到球可以得分
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vx={0,0,0,0};
float []vy={3,2,2.5,4};
void setup(){
  size(500,600);
}
void draw(){
  background(255);
  for(int i=0;i<4;i++){
    fill(255,255,0);ellipse(x[i],y[i],50,50);
    if(dist(mouseX,mouseY,x[i],y[i])<=50){
      continue;
    }
    y[i]=y[i]+vy[i];//vy是速度
    if(y[i]>600) vy[i] = -vy[i];//撞到下方
    if(y[i]<0) vy[i] = -vy[i];//接到上方

  }
  fill(255,0,0); ellipse(mouseX,mouseY,50,50);
}

然後我們加上使用Boolean
讓紅球在碰到黃球之後,黃球就會消失

//mouse碰到球可以得分
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vy={3,2,2.5,4};
boolean [] dead={false,false,false,false};
void setup(){
  size(500,600);
}
void draw(){
  background(255);
  for(int i=0;i<4;i++){
    if(dist(mouseX,mouseY,x[i],y[i])<=50){
      dead[i]=true;
    }
    if(dead[i]==true)continue;
    fill(255,255,0);ellipse(x[i],y[i],50,50);
    y[i]=y[i]+vy[i];//vy是速度
    if(y[i]>600) vy[i] = -vy[i];//撞到下方
    if(y[i]<0) vy[i] = -vy[i];//接到上方

  }
  fill(255,0,0); ellipse(mouseX,mouseY,50,50);
}

運用boolean 使背景顏色更改

製造出很多顆球

//mouse碰到球可以得分
float []x;
float []y;
float []vy;
boolean [] dead;
int N=20;
void setup(){
  size(500,600);
  x=new float[N];
  y=new float[N];
  vy=new float[N];
  dead=new boolean[N];
  for(int i=0;i<N;i++){
    x[i]=random(500);
    y[i]=random(100,200);
    vy[i]=random(3,4);
    dead[i]=false;
  }
}
void draw(){
  background(255);
  for(int i=0;i<N;i++){
    if(dist(mouseX,mouseY,x[i],y[i])<=50){
      dead[i]=true;
    }
    if(dead[i]==true)continue;
    fill(255,255,0);ellipse(x[i],y[i],50,50);
    y[i]=y[i]+vy[i];//vy是速度
    if(y[i]>600) vy[i] = -vy[i];//撞到下方
    if(y[i]<0) vy[i] = -vy[i];//接到上方

  }
  fill(255,0,0); ellipse(mouseX,mouseY,50,50);
}


class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){
    x=random(500);
    y=random(100,200);
    vy=random(3,4);
    dead=false;
  }
  void draw(){
    if(dead==true)return;
    ellipse(x,y,50,50);
    if(dist(mouseX,mouseY,x,y)<50){
      dead=true;
    }
    y=y+vy;
    if(y>500)vy=-vy;
    if(y<0)vy=-vy;
  }
} 
Ball [] balls;
void setup(){
  size(500,500);
  balls=new Ball[20];
  for(int i=0;i<20;i++){
    balls[i]=new Ball();
  }
}
void draw(){
  background(255);
  for(int i=0;i<20;i++){
    balls[i].draw();
  }
}



球會朝四面八方到處移動
class Ball{
  float x,y,vx,vy;
  boolean dead;
  Ball(){
    x=random(500);
    y=random(500);
    vy=random(-4,4);
    vx=random(-4,4);
    dead=false;
  }
  void draw(){
    if(dead==true)return;
    ellipse(x,y,50,50);
    if(dist(mouseX,mouseY,x,y)<50){
      dead=true;
    }
    x=x-vx;
    y=y-vy;
    if(y>500||y<0)vy=-vy;
    if(x>500||x<0)vx=-vx;
  }
} 
Ball [] balls;
void setup(){
  size(500,500);
  balls=new Ball[20];
  for(int i=0;i<20;i++){
    balls[i]=new Ball();
  }
}
void draw(){
  background(255);
  for(int i=0;i<20;i++){
    balls[i].draw();
  }
}

之後加上vy+=0.98; 重力加速度

使用Reborn做出像彈幕遊戲一樣的效果






只要滑鼠碰到紅色點點就Gameover了

//Step03-2 用 class物件
class Ball{//我們發明 Ball物件
  float x, y, vx, vy;
  boolean dead;
  Ball(){//建構 同名的東西
    reborn();
  }
  void reborn(){
    x = random(500);
    y = random(500);
    vy = random(-2,2);
    vx = random(-2,2);
    dead = false;//沒有死掉
  }
  void draw(){
    if(dead==true) return;
    fill(255,0,0); ellipse(x,y, 5,5);
    if( dist(mouseX,mouseY,x,y)<5 ){
      dead=true;
      gameOver=true;
    }
    x = x + vx*1;//速度*時間=距離
    y = y + vy*1;
    if(y>500 || y<0) reborn();
    if(x>500 || x<0) reborn();
  }
}
Ball [] balls;
void setup(){
  size(500,500);
  balls = new Ball[99];
  for(int i=0; i<99; i++){
    balls[i] = new Ball();
  }
}
boolean gameOver=false;
void draw(){
  background(0);
  for(int i=0; i<99; i++){
    balls[i].draw();
  }
  if(gameOver) background(255,0,0);  
}





2021年11月15日 星期一

week06

 這周第一堂課我們一開始先學用text來印出文字


textSize是調整字的大小
再用text就可以印出文字
之後我們再把程式改成可以互動的

加上void setup()跟void draw()

再來把text裡改成Time+frameCount,顯示的文字就會變成Time:過了幾個frame

把frame/60就是1秒鐘 但越跑越久就會有誤差
下面millis就是準確的1秒鐘

如果使用hour()+":"+minute()+":"+second()就可以顯示現在時間

把程式改成中文,會發現他無法顯示出來

使用PFont.list()可以列出電腦內所有的字型

然後再用PFont就可以讓我們寫出中文



使用mousePressed就可以讓字體在滑鼠按下之後變成微軟正黑體


之後我們教了String,用String hh=nf(hour(),2);就可以把hh設呈現在時間的幾點mm就是幾分ss
就是幾秒


用now代表現在時間的總秒數
再用next代表下課時間的總秒數
最後再用next-now就會是從現在到下課的剩餘時間了












把remain/60/60就會變成小時
remain/60%60就會變成分鐘
remain%60就會變成秒
這樣第四行就會把剩餘的時間轉換成小時:分鐘:秒


使用PImage可以把圖片秀出來
PImage [] img=new PImage[10];
void setup(){
  size(1120,450);
  for(int i=0;i<10;i++)img[i]=loadImage(i+".png");
}
void draw(){
  for(int i=0;i<10;i++){
    int x=(i%5)*224,y=int(i/5)*225;
    image(img[i],x,y);
  }
}





//Q: 能不能改用漂亮的圖片, 來顯示數字
//(1) 在 images.google.com 找到10張圖 0...9
//    ex. IconsPng Golden Number 1 Icons PNG
//(2) 存在我們的專案目錄,檔名: 0.png ~ 9.png
//   使用陣列讀進來
PImage [] img = new PImage[10];//0...9
PFont font;
void setup(){
  //size(224*5,225*2);
  size(  1120, 450  );//把全部的圖,都秀出來
  for(int i=0; i<10; i++) img[i]=loadImage(i+".png");
  fill(255);
  font = createFont("標楷體",80);
  textFont(font);
}
void draw(){
  background(#075BB2);
  String hh=nf(hour(),2);
  String mm=nf(minute(),2);
  String ss=nf(second(),2);
  text("現在:"+hh+":"+mm+":"+ss, 50,100);
  text("下課:15:40:00", 50,200);
  
  int now = hour()*60*60 + minute()*60 + second();//總秒數
  int next = 16   *60*60 + 40      *60 + 0;//總秒數
  int remain = next-now;//剩下的時間 (秒數來算)
  if(remain<0) remain += 24*60*60;
  text("剩下:"+remain, 50,300);
  hh = nf(remain/60/60%60, 2);
  mm = nf(remain/60%60, 2);
  ss = nf(remain%60, 2);
  text("剩下:"+hh+":"+mm+":"+ss, 50,400);
  int x=800;
  while(remain>0){
    int n = remain%10;
    remain = remain / 10;
    image( img[n], x,100,100,100);
    x-=100;
  }
}





2021年11月1日 星期一

week05

今天第一堂課老師先教我們使用Processing寫程式播放影片 

先到libraries裡找到video|GStreamer-based video library for Processing並下載


之後可以到左上角檔案>範例>video>loop
就可以開啟loop的範例檔案

然後我們就可以自己寫一個播放影片的程式了





import processing.video.*;
Movie movie;
void setup(){
  size(640,480);
  movie = new Movie(this,"launch2.mp4");
  movie.loop();
}
void draw(){
  image(movie,0,0);
}
void movieEvent(Movie m){
  m.read();
}
之後我們用攝影鏡頭

import processing.video.*;
Capture cam;
void setup(){
  size(640,480);
  cam=new Capture(this,640,480);
  cam.start();
}
void draw(){
  if (cam.available()) {
    cam.read();
   }
  image(cam,0,0);
  saveFrame();
}
在最後面加上saveFrame就可以把視訊內容錄下來了


之後再用第一堂課教的播放影片程式
就可以把剛剛錄下來的影片播放出來


點一下滑鼠就會自動存取畫面


void setup(){
  size(640,480);
  background(255,0,0);
}
void draw(){
  println(frameCount);
}
void mousePressed(){
  loadPixels();
  for(int i=0;i<640*480/2;i++){
    pixels[i]=color(0,255,0);
  }
  updatePixels();
  saveFrame();
}


最後一堂課我們就利用前幾堂課教過的所有程式
寫出一個可以播放影片,按一下滑鼠就會暫停並且變色的程式
import processing.video.*;
Movie movie;
color[]c={#F0F0F0,#FFF160,#FFC501,#FE9600,#03001C};
int now=0;
void setup(){
  size(640,480);
  background(#F0F0F0);
  movie = new Movie(this,"1234.mov");
  movie.play();
}
void draw(){
  if(movie.available()){
    movie.read();
    image(movie,0,0);
  }
}
void mousePressed(){
  movie.pause();
  loadPixels();
  for(int i=0;i<640*480;i++){
    float bright = brightness(pixels[i]);
    int now = 4-int(bright/67);
    pixels[i]=c[now];
  }
  updatePixels();
}