偵測頭部位置,出現籃子,令籃子接住所以隨機掉下來的元寶
每次接到元寶都會加分
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();
}
沒有留言:
張貼留言