2016年3月17日 星期四

02160836_程玟綺, Week04,

第一堂課

1.射擊遊戲,先找到食指













import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
  size(600,400);
  leap=new LeapMotion(this);
}
void draw(){
  background(255);
  for(Hand hand:leap.getHands()){
    Finger finger_index=hand.getIndexFinger();
    finger_index.draw();
  }
}


2.建立一個立體旋轉方塊在畫面正中央













import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
  size(600,400,P3D); 
  leap=new LeapMotion(this);
}
void draw(){
  background(255);
  for(Hand hand:leap.getHands()){
    Finger finger_index=hand.getIndexFinger();
    finger_index.draw();
   PVector pos=finger_index.getPosition();  //位置
    PVector dir=finger_index.getDirection(); //方向
    println(pos);
    println(dir);
  }
 lights();  //打光
 fill(255,0,0);
 translate(width/2,height/2);  //左上角為中心,要畫在畫面正中央
 rotateY(radians(frameCount));   //radians把frameCount轉換成"度"
 box(300,100,100);
}

3.畫多個球體,跟著食指走 (決定子彈射擊的方向)















import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
  size(600,400,P3D);
  leap=new LeapMotion(this);
}
PVector pos=null,dir=null;
void draw(){
  background(255);
  for(Hand hand:leap.getHands()){
    Finger finger_index=hand.getIndexFinger();
    finger_index.draw();
    pos=finger_index.getPosition();
    dir=finger_index.getDirection();
    //println(pos);
    //println(dir);
  }
  lights();
  fill(255,0,0);
  pushMatrix();
    translate(width/2,height/2);
    for(int i=0;i<10;i++){
      if(dir!=null) translate(dir.x*10*i,dir.y*10*i,dir.z*10*i);
      sphere(40);
    }
  popMatrix(); 
  //rotateY(radians(frameCount));
  //box(300,100,100);

}


4.畫子彈射擊















import de.voidplus.leapmotion.*;
PVector pos=null,dir=null;
PVector []bullet=new PVector[10];
PVector []bullet_dir=new PVector[10];
int bulletNow=0;
LeapMotion leap;
void setup(){
  size(600,400,P3D);
  leap=new LeapMotion(this);
  for(int i=0;i<10;i++){
    bullet[i]=new PVector(0,0,0);
    bullet_dir[i]=new PVector(0,0,0);
}
}
void draw(){
  background(255);
  for(Hand hand:leap.getHands()){
    Finger finger_index=hand.getIndexFinger();
    finger_index.draw();
    //pos=finger_index.getPosition();
    dir=finger_index.getDirection();
    //println(pos);
    //println(dir);
  }
  lights();
  fill(255,0,0);
  translate(width/2,height/2);
  pushMatrix();
    for(int i=0;i<10;i++){
      if(dir!=null) translate(dir.x*10*i,dir.y*10*i,dir.z*10*i);
      sphere(40);
  }
  popMatrix();
  pushMatrix();
  fill(0,0,255);
  for(int i=0;i<10;i++){
    pushMatrix();
      translate(bullet[i].x,bullet[i].y,bullet[i].z);
      sphere(41);
      bullet[i].x+=bullet_dir[i].x;
      bullet[i].y+=bullet_dir[i].y;
      bullet[i].z+=bullet_dir[i].z;
      popMatrix();
  }
  popMatrix();
}
void keyPressed(){
  bullet_dir[bulletNow].x=dir.x*5;
  bullet_dir[bulletNow].y=dir.y*5;
  bullet_dir[bulletNow].z=dir.z*5;
  bulletNow++;
  //rotateY(radians(frameCount));
  //box(300,100,100);

}


5.解決超過10顆子彈便會當機的問題












import de.voidplus.leapmotion.*;
PVector pos=null,dir=null;
PVector []bullet=new PVector[10];
PVector []bullet_dir=new PVector[10];
int bulletNow=0;
LeapMotion leap;
void setup(){
  size(600,400,P3D);
  leap=new LeapMotion(this);
  for(int i=0;i<10;i++){
    bullet[i]=new PVector(0,0,0);
    bullet_dir[i]=new PVector(0,0,0);
}
}
void draw(){
  background(255);
  for(Hand hand:leap.getHands()){
    Finger finger_index=hand.getIndexFinger();
    finger_index.draw();
    //pos=finger_index.getPosition();
    dir=finger_index.getDirection();
    //println(pos);
    //println(dir);
  }
  lights();
  fill(255,0,0);
  translate(width/2,height/2);
  pushMatrix();
    for(int i=0;i<10;i++){
      if(dir!=null) translate(dir.x*10*i,dir.y*10*i,dir.z*10*i);
      sphere(40);
  }
  popMatrix();
  fill(0,0,255);
  for(int i=0;i<10;i++){
    pushMatrix();
      translate(bullet[i].x,bullet[i].y,bullet[i].z);
      sphere(41);
      bullet[i].x+=bullet_dir[i].x;
      bullet[i].y+=bullet_dir[i].y;
      bullet[i].z+=bullet_dir[i].z;
      popMatrix();
  }
}
void keyPressed(){
  bullet[bulletNow].x=0; bullet[bulletNow].y=0; bullet[bulletNow].z=0;
  bullet_dir[bulletNow].x=dir.x*5;
  bullet_dir[bulletNow].y=dir.y*5;
  bullet_dir[bulletNow].z=dir.z*5;
  bulletNow++;
  if(bulletNow>=10){
  bulletNow=0;
  //rotateY(radians(frameCount));
  //box(300,100,100);
}
}

第三堂課
實作打棒球













//當棒子碰到球時,畫面變成紅色的


import de.voidplus.leapmotion.*;
LeapMotion leap;
PVector pos,dir,ball;
void setup(){
  size(600,400,P3D);
  leap=new LeapMotion(this);
  pos= new PVector(300,200,0);
  ball=new PVector(0,0,0);
}
void draw(){
  ball.x+=2; ball.y+=2;
  for(Hand hand:leap.getHands()){
    pos=hand.getPosition();
  }
  background(255);
  fill(255,0,0);
  pushMatrix();
   translate(pos.x,pos.y,pos.z);
   box(30,30,30);
 popMatrix();
 pushMatrix();
   translate(ball.x,ball.y);
   sphere(30);
   if(dist(ball.x,ball.y,pos.x,pos.y)<30) background(255,0,0);
 popMatrix();

 }










沒有留言:

張貼留言