2016年3月17日 星期四

week04

今天一樣先下載好leap motion
https://www.leapmotion.com/setup

今天我們 打棒球遊戲 跟 射擊小遊戲

一開始我們先要找出食指的位置跟方向
再將食指畫出來



程式碼:
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));
  box(300, 100, 100);

}



接下來做出一個很像海參的槍
利用球做出來的


再來做出發射子彈的功能



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++;

}



接下來這個程式有個小bug
發射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();
  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[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;
}



接下來做類似球棒去打到球的功能
這邊是用一個方塊去打一顆球
打到會出現紅色的畫面
但還沒有其他功能




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();
}

沒有留言:

張貼留言