2016年3月17日 星期四

Week 04 02160430 陳繁鑫

***LeapMotion函式庫只能在Processing2.2.1使用(未更新)***



Leap Motion 下載:https://www.leapmotion.com/setup

本周目標:學習射擊、打棒球遊戲的操作。

---------------------------------------------------------------------------------

射擊遊戲

先抓出一根手指當作手槍槍把


 PVector pos = finger_index.getPosition(); //取得手指座標

    PVector dir = finger_index.getDirection();//取得手指方向

lights();  //打光

  fill(255,0,0);  //填充顏色

  translate(width/2,height/2); //將物體座標移動到中心

  rotateY(radians(frameCount)); //每秒旋轉的徑度

  box(100,100,50); //畫box


PVector pos = null,dir = null;  //給初值,後面判斷才不會出錯

pushMatrix();

    translate(width/2,height/2);

    for(int i=0;i<10;i++){  //一次畫出10顆球,當作砲管

    if(dir!=null) {translate(dir.x*10*i,dir.y*10*i,dir.z*10*i); 

      sphere(40);}

    }

  popMatrix();


PVector []bullet = new PVector[10]; //10個子彈 

PVector []bullet_dir = new PVector[10]; //10個子彈向量 

並給初值


 pushMatrix();

    fill(0, 0, 255);

    for (int i=0; i<10; i++)
    {
      pushMatrix(); //每個子彈各別畫

        translate(bullet[i].x, bullet[i].y, bullet[i].z);

        sphere(50);

        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[bulletNow].x =0; bullet[bulletNow].y =0; 

  bullet[bulletNow].z =0;

  bullet_dir[bullerNow].x = dir.x*5;    

  bullet_dir[bullerNow].y = dir.y*5;

  bullet_dir[bullerNow].z = dir.z*5;

  bullerNow++;  //換下一個子彈

  if(bulletNow>=10)

    bulletNow = 0;

}


完整程式碼
import de.voidplus.leapmotion.*;
LeapMotion leap;
PVector pos = null, dir=null;
PVector []bullet = new PVector[10];
PVector []bullet_dir = new PVector[10];
int bulletNow = 0;
void setup() {
  size(640, 480, 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(50);
        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[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;
}
---------------------------------------------------------------------------------

打棒球關鍵

一顆球進來碰到手指控制的方塊(球棒)畫面會變黃色

透過dist()抓出兩個物體的距離,以此來判斷是否有碰到物體





沒有留言:

張貼留言