功能簡介:
能夠偵測人的手臂,伸直為投出,縮回為新增一個球,用拋物線進行投籃
程式碼:
import kinect4WinSDK.Kinect;
import kinect4WinSDK.SkeletonData;
import ddf.minim.*;
AudioPlayer player;
Minim minim;
Kinect kinect;
ArrayList <SkeletonData> bodies;
float ballX=900,ballY=600,ballVX=0,ballVY=0,ballFristX=500,ballFristY=600;
float basketX = 50 , basketY = 100;
float counflyX =0, counflyY = 0;
float grade = 0;
boolean flying=false,isflying=false,ifball=false;
PVector v1,v2;
float i=0,i1 = 0,x=30,G=0.98,ballmove;
PImage Curry01,Curry02,net,imgBG;
float timeCount=3000;
float[] goal = new float [100];
boolean gamestart=false;
boolean gameover=false;
boolean loadgame=false;
void setup(){
size(1000,700);
kinect = new Kinect(this);
smooth();
bodies = new ArrayList<SkeletonData>();
Curry01 = loadImage("curry01.jpg");
Curry02 = loadImage("curry02.jpg");
net = loadImage("basketnet.jpg");
// minim = new Minim(this);
//player = minim.loadFile("NBA.mp3", 2048);
imgBG = loadImage("NBA.jpg");
}
void draw(){
//background(255);
println(gamestart,gameover);
if(gamestart){
gameStart();
scoreShow();
}
else{
textSize(20);
fill(250, 160, 0);
text("Wave to Start!",450,300);
}
for (int i=0; i<bodies.size (); i++)
{
drawSkeleton(bodies.get(i));
drawPosition(bodies.get(i));
}
}
void scoreShow(){
if(gameover){
fill(0);
rect(-10,-10,1100,800);
textSize(30);
fill(250, 160, 0);
text("Your Score: "+grade, 450, 300);
}
else{
textSize(10);
fill(240, 220, 0);
text("Your Score: "+grade, 10, 350);
}
}
void gameStart(){
//player.play();
image(imgBG ,0,0,1000,700);
image(net, 50, 200);
image(Curry01, ballX, 600);
fill(200,80,80);
ellipse(ballX,ballY,50,50);
textSize(30);
float time = timeCount/100 ;
text("Time"+ time ,500,100);
timeCount--;
if(timeCount<0)
{
gamestart = false;
gameover= true;
//player.close();
//minim.stop();
super.stop();
}
if(ballX>97 && ballX<173 && ballY<275 && ballY>225 ){
grade++;
}
text("Score : "+grade , 500,150);
if(flying==true){
ballX+=ballVX;
ballY+=ballVY;
ballY+=G;
i++;
if(i>5)
isflying = true;
}
if(isflying){
ballX+=counflyX;
ballY=ballY+counflyY;
counflyY+=G;
i1++;
if(i1>200){
counflyX =0 ; counflyY = 0;
i1 = 0;
}
}
}
void mouseClicked() {
if(gameover==true&&gamestart==false){
grade=0;
gameover=false;
frameCount=0;
setup();
redraw();
gamestart=true;
}
if(gamestart==false){
gamestart=true;
}
}
void JudgeFlying(SkeletonData _s, int _j1,int _j2, int _j3){
if(gamestart==false){
gamestart=true;
}
v1=PVector.sub(_s.skeletonPositions[_j3],_s.skeletonPositions[_j2]);
v2=PVector.sub(_s.skeletonPositions[_j2],_s.skeletonPositions[_j1]);
ballVX = (_s.skeletonPositions[_j2].x-_s.skeletonPositions[_j3].x);
ballVY = (_s.skeletonPositions[_j2].y-_s.skeletonPositions[_j3].y);
float angle=degrees(PVector.angleBetween(v1, v2));
if(angle>=0 && angle<=0.07 &&ballVX<0.3&&ballVY<0.3/*&& isflying == false*/){
image(Curry02,900, 600);
if(i<=5){
flying=true;
float len=mag(ballVX, ballVY);
ballVX = ballVX/len*x;
ballVY = ballVY/len*x*1.2;
if(i==5){
counflyY = ballVY;
counflyX = ballVX;
float len2=mag(counflyX,counflyY);
counflyX = counflyX/len2*x;
counflyY = counflyY/len2*x*1.2;
}
}
}
else if (angle <= 180&& angle >= 175 ){
image(Curry01, 900, 600);
i=0;
i1=0;
ballX=900;
ballY=600;
counflyX =0 ; counflyY = 0;
}
}
void mouseDragged(){
ballX=mouseX; ballY=mouseY;
}
void mousePressed(){
flying=false;
}
void drawPosition(SkeletonData _s)
{
noStroke();
fill(0, 100, 255);
String s1 = str(_s.dwTrackingID);
}
void drawSkeleton(SkeletonData _s)
{
JudgeFlying(_s,
Kinect.NUI_SKELETON_POSITION_WRIST_RIGHT,
Kinect.NUI_SKELETON_POSITION_ELBOW_RIGHT,
Kinect.NUI_SKELETON_POSITION_SHOULDER_RIGHT
);
}
void appearEvent(SkeletonData _s)
{
if (_s.trackingState == Kinect.NUI_SKELETON_NOT_TRACKED)
{
return;
}
synchronized(bodies) {
bodies.add(_s);
}
}
void disappearEvent(SkeletonData _s)
{
synchronized(bodies) {
for (int i=bodies.size ()-1; i>=0; i--)
{
if (_s.dwTrackingID == bodies.get(i).dwTrackingID)
{
bodies.remove(i);
}
}
}
}
void moveEvent(SkeletonData _b, SkeletonData _a)
{
if (_a.trackingState == Kinect.NUI_SKELETON_NOT_TRACKED)
{
return;
}
synchronized(bodies) {
for (int i=bodies.size ()-1; i>=0; i--)
{
if (_b.dwTrackingID == bodies.get(i).dwTrackingID)
{
bodies.get(i).copy(_a);
break;
}
}
}
}
沒有留言:
張貼留言