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; } } } }
2015年6月29日 星期一
期末DEMO
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; } } } }
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言