2016年3月17日 星期四

02163042_王冠閔 Week 04

各組期末作品教學

射擊遊戲


畫出一隻手指

畫出待會要用的方塊(槍管)


畫出圓形(子彈)

畫出槍管畫出子彈並且可以射擊
程式碼:
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();
}
  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++;
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
以上程式碼果設超過10顆子彈就會當機
所以將void keyPressed()修改

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

沒有留言:

張貼留言