2015年6月29日 星期一

期末作品DEMO











本次完成的期末作品為懷舊小遊戲,接元寶
偵測頭部位置,出現籃子,令籃子接住所以隨機掉下來的元寶
每次接到元寶都會加分



1. 操作方式:一開始先將手張開讓程式偵測你的骨架,出現籃子之後就可以移動你的身軀來移動畫面上的籃子接元寶
2. Youtube連結: https://www.youtube.com/watch?v=tHROAzu7cYo
3. 說明:本來接元寶有設定會出現聲音,但是不知道哪個環節出了問題,導致它只會在第一次的播放中出現聲音
import SimpleOpenNI.*;
import ddf.minim.*;
Minim minim1;
AudioPlayer player1;
Minim minim2;
AudioPlayer player2;
SimpleOpenNI openni;
PImage imgYunBao;
PImage basket;
int score=0;
class Fruit {
  float X, Y, VX, VY;
  boolean dead = false;
  Fruit(float x, float y, float vx, float vy) {
    X=x;
    Y=y;
    VX=vx;
    VY=vy;
    dead=false;
  }
  
  void draw() {    
   
    if(dead){ score++; player2.play();dead=false;stop();}
    else{image(imgYunBao,X,Y,50,25);}
    textSize(80);
    text("Score is "+ score,120,120);
    textSize(80);
  
    
    
  }
  void update() {
    X+=VX; 
    Y+=VY; 
    VY+=0.5;
    
    if (X<-100||X>1024||Y<-100||Y>730) {
      X=random(1024);
      Y=random(200);
      VX=random(30)-15;
      VY=-random(30);
      dead=false;
    }
    if(dead==false&&dist(pos1.x+200,718,X,Y)<50||dist(X,Y,mouseX,mouseY)<50 ) {
    dead=true;
    }
  }
}

Fruit fruit[]= new Fruit[20];
PVector pos1=new PVector(-5000,0,0),pos=new PVector(-5000,0,0);
void setup() {
  
  minim1 = new Minim(this);
  player1 = minim1.loadFile("mainjoe.mp3");
  player1.play();
  minim2 = new Minim(this);
  player2 = minim2.loadFile("ding.mp3");
  
  imgYunBao=loadImage("YunBao.png");
  basket=loadImage("01.png");
  size(1024, 768);
  openni = new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  openni.enableRGB();
  for (int i=0; i<5; i++) 
    fruit[i] = new Fruit(random(640), random(240), random(10)-15, -random(10));
}  
  void draw() {
    openni.update();
    image(openni.rgbImage(),0,0,1024,768);
    image(openni.userImage(),0,618,200,150);
    
    for (int i=0; i<5; i++) {
      fruit[i].draw();
      fruit[i].update();
    }
    
    int [] userList=openni.getUsers();
    for(int i=0;i<userList.length;i++){
      if(openni.isTrackingSkeleton(userList[i])){
        
        openni.getJointPositionSkeleton(userList[i],SimpleOpenNI.SKEL_HEAD,pos);
        openni.convertRealWorldToProjective(pos,pos1);
        //println(pos1);
       
        image(basket,pos1.x+200,658,100,100);
      }
  }
  }
  
  void onNewUser(SimpleOpenNI curContext, int userId)
{
  println("onNewUser - userId: " + userId);
  println("\tstart tracking skeleton");
  
  curContext.startTrackingSkeleton(userId);
}

void mouseMoved(){
  strokeWeight(30); stroke(255,0,0); line(mouseX,mouseY,pmouseX,pmouseY);
  strokeWeight(1); stroke(0);
}

void stop()
{
player2.close();
minim2.stop();

}

沒有留言:

張貼留言