2017年9月30日 星期六

Week 03 20170930

作業一
圖檔的互動

PImage imgBird, imgPig; 讀圖檔
void setup(){
  size(800,600); 視窗大小
  imgBird=loadImage("bird.png"); 鳥的圖檔
  imgPig=loadImage("pig.png");  豬的圖檔
}
float birdVX=0,birdVY=0; 鳥的速度設定
float birdX=400,birdY=300; 鳥的圖檔位置
void draw(){
    background(255); 背景顏色
    image(imgPig,400,300,50,50); 豬的位址及大小
    image(imgBird,birdX,birdY,55,55); 鳥的位址及大小
    line(birdX,birdY,400,300); 輔助線
    birdX +=birdVX; 鳥的X位置+鳥的速度
    birdY +=birdVY; 鳥的Y位置+鳥的速度
}
void mouseDragged(){ 當滑鼠拖曳時
  birdX=mouseX; 鳥的X位置移動到滑鼠的X位置
  birdY=mouseY; 鳥的Y位置移動到滑鼠的Y位置
}
void mouseReleased(){ 當滑鼠放開時
  birdVX=(400-mouseX)/100.0; 鳥的X速度
  birdVY=(300-mouseY)/100.0; 鳥的Y速度
}

調整線的位置

PImage imgBird, imgPig;
void setup(){
  size(800,600);
  imgBird=loadImage("bird.png");
  imgPig=loadImage("pig.png");
  imageMode(CENTER); 上圖的線會在圖片的左上角,為了更方便理解必須將線放在圖的中間
}
float birdVX=0,birdVY=0;
float birdX=400,birdY=300;
void draw(){
    background(255);
    image(imgPig,400,300,50,50);
    image(imgBird,birdX,birdY,55,55);
    line(birdX,birdY,400,300);
    birdX +=birdVX;
    birdY +=birdVY;
}
void mouseDragged(){
  birdX=mouseX;
  birdY=mouseY;
}
void mouseReleased(){
  birdVX=(400-mouseX)/100.0;
  birdVY=(300-mouseY)/100.0;
}

增加加速度

PImage imgBird, imgPig;
void setup(){
  size(800,600);
  imgBird=loadImage("bird.png");
  imgPig=loadImage("pig.png");
  imageMode(CENTER);
}
float birdVX=0,birdVY=0;
float birdX=400,birdY=300;
float birdAX=0,birdAY=0; 鳥的X加速度及鳥的Y加速度
void draw(){
    background(255);
    image(imgPig,400,300,50,50);
    image(imgBird,birdX,birdY,55,55);
    line(birdX,birdY,400,300);
    birdX +=birdVX;
    birdY +=birdVY;
    birdVX +=birdAX; 鳥的X速度+鳥的X加速度
    birdVY +=birdAY; 鳥的Y速度+鳥的Y加速度
}
void mouseDragged(){
  birdX=mouseX;
  birdY=mouseY;
  birdVX=birdVY=birdAX=birdAY=0;
}
void mouseReleased(){
  birdVX=(400-mouseX)/10.0;
  birdVY=(300-mouseY)/10.0;
  birdAY=1.98; 鳥的Y加速度(相當於重力加速度)
}

碰撞之後消失

PImage imgBird, imgPig;
void setup(){
  size(800,600);
  imgBird=loadImage("bird.png");
  imgPig=loadImage("pig.png");
  imageMode(CENTER);
}
float birdVX=0,birdVY=0;
float birdX=400,birdY=300;
float pigX=700,pigY=100;
float birdAX=0,birdAY=0;
boolean pigAlive=true; 判斷圖片是否存在
void draw(){
    background(255);
    if(pigAlive) image(imgPig,pigX,pigY,50,50); 
    image(imgBird,birdX,birdY,55,55);
    if(dist(pigX,pigY,birdX,birdY)<100){ 當豬和鳥的位置<100,豬會消失
      pigAlive=false;
    }
    line(birdX,birdY,400,300);
    birdX +=birdVX;
    birdY +=birdVY;
    birdVX +=birdAX;
    birdVY +=birdAY;
}
void mouseDragged(){
  birdX=mouseX;
  birdY=mouseY;
  birdVX=birdVY=birdAX=birdAY=0;
}
void mouseReleased(){
  birdVX=(400-mouseX)/10.0;
  birdVY=(300-mouseY)/10.0;
  birdAY=0.18;
}

增加地圖範圍及空氣阻力
PImage imgBird, imgPig;
void setup(){
  size(800,600);
  imgBird=loadImage("bird.png");
  imgPig=loadImage("pig.png");
  imageMode(CENTER);
}
float birdVX=0,birdVY=0;
float birdX=400,birdY=300;
float pigX=700,pigY=100;
float birdAX=0,birdAY=0;
boolean pigAlive=true;
void draw(){
    background(255);
    if(pigAlive) image(imgPig,pigX,pigY,50,50);
    image(imgBird,birdX,birdY,55,55);
    if(dist(pigX,pigY,birdX,birdY)<100){
      pigAlive=false;
    }
    line(birdX,birdY,400,300);
    birdX +=birdVX;
    birdY +=birdVY;
    if(birdX<27.5){birdX=27.5; birdVX=-birdVX;}地圖X左邊邊界和鳥圖片的一半大小
    if(birdX>width-27.5){birdX=width-27.5;birdVX=-birdVX;}地圖X右邊邊界和鳥的圖片一半大小
    if(birdY<27.5){birdY=27.5;birdVY=-birdVY;}地圖Y上面邊界和鳥圖片的一半大小
    if(birdY>height-27.5){birdY=height-27.5;birdVY=-birdVY;}地圖Y下面邊界和鳥圖片的一半大小
    birdVX +=birdAX;
    birdVY +=birdAY;
    birdVX*=0.997; 鳥的X速度空氣阻力
    birdVY*=0.997; 鳥的Y速度空氣阻力
}
void mouseDragged(){
  birdX=mouseX;
  birdY=mouseY;
  birdVX=birdVY=birdAX=birdAY=0;
}
void mouseReleased(){
  birdVX=(400-mouseX)/10.0;
  birdVY=(300-mouseY)/10.0;
  birdAY=0.98;
}




沒有留言:

張貼留言