week08
8-1_newton_vx_vy
//碰撞偵測: Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動
void setup(){
size(400,400);
}
float x=200,y=200,vx=1,vy=1;
void draw(){
ellipse(x,y,10,10);
x += vx;
y += vy;
}

8-2_newton_x_y_vx_vy_gravity
//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float x=50,y=250,vx=2,vy=-20; void draw(){ ellipse(x,y,10,10); x += vx; y += vy; vy+=0.98;//重力加速度 }
8-3_newton_floor_if_collsion//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float x=50,y=250,vx=2,vy=-20; void draw(){ x += vx; y += vy; vy+=0.98;//重力加速度 if(y>350){//利用if判斷有沒有到地板 y=350位置 y=350; } ellipse(x,y,10,10); }//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float x=50,y=250,vx=2,vy=-20; void draw(){ x += vx; y += vy; vy+=0.98;//重力加速度 if(y>350){//利用if判斷有沒有到地板 y=350位置 y=350; vy = -vy*0.5; } ellipse(x,y,10,10); } 8-4_mario_keyPressed_keyCode_UP_RIGHT_LEFT //碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; fill(255,0,0); ellipse(marioX,marioY,15,25); fill(229,119,42); rect(0,260,400,150); } void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; }
8-5_mario_keyReleased_keyCode_UP_RIGHT_LEFT//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; marioY += vy; //vy += 0.98 fill(255,0,0); ellipse(marioX,marioY,15,20); fill(229,119,42); rect(0,260,400,150); } void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; if(keyCode==UP) vy = -20; } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; }按左右鍵可以慢慢移動,不會突然飛走 8-6_mario_flaying_vy_098
//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; if(flying){//如果在飛行中 marioY += vy;//上下的位置會變 vy += 0.98;//重力加速度往下 if(marioY >=250){//碰到地板 marioY = 250; flying = false;//不再飛行 } } fill(255,0,0); ellipse(marioX,marioY,15,20); fill(229,119,42); rect(0,260,400,150); } boolean flying = false;//一開始沒有在飛!!! void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; if(keyCode==UP){ vy = -20; flying = true; } } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; }
按上不會飛走,但是可以一直跳//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; if(flying){//如果在飛行中 marioY += vy;//上下的位置會變 vy += 0.98;//重力加速度往下 if(marioY >=250){//碰到地板 marioY = 250; flying = false;//不再飛行 } } fill(255,0,0); ellipse(marioX,marioY,15,20); fill(229,119,42); rect(0,260,400,150); } boolean flying = false;//一開始沒有在飛!!! void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; if(keyCode==UP && flying==false){//如果沒有在飛的話,才能飛 vy = -20; flying = true; } } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; }
8-7_mario_hit_box_if //碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; if(flying){//如果在飛行中 marioY += vy;//上下的位置會變 vy += 0.98;//重力加速度往下 if(marioY >=250){//碰到地板 marioY = 250; flying = false;//不再飛行 } } fill(255,0,0); ellipse(marioX,marioY,15,20); fill(229,119,42); rect(0,260,400,150); fill(229,119,42); rect(200,150,20,20); if(hitBox(200,150,20,20)){ vy = 0; marioY = 150+20; } } boolean hitBox(int x,int y,int w,int h){ if(x<marioX && marioX<x+w && y<marioY && marioY<y+h) return true; else return false; } boolean flying = false;//一開始沒有在飛!!! void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; if(keyCode==UP && flying==false){//如果沒有在飛的話,才能飛 vy = -20; flying = true; } } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; }
撞到方塊速度變0往下掉
8-8_mario_vy_direction_stanf_fall//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; if(flying){//如果在飛行中 marioY += vy;//上下的位置會變 vy += 0.98;//重力加速度往下 if(marioY >=250){//碰到地板 marioY = 250; flying = false;//不再飛行 } } fill(255,0,0); ellipse(marioX,marioY,15,20); fill(229,119,42); rect(0,260,400,150); fill(229,119,42); rect(200,150,20,20); if(hitBox(200,150,20,20)){ if(vy>0){ marioY = 150-10; flying = false; }else{ vy = 0; marioY = 150+20+10; } } } boolean hitBox(int x,int y,int w,int h){ if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true; else return false; //+7-7是考慮了物體的寬度,原本是以肚臍當點 } boolean flying = false;//一開始沒有在飛!!! void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; if(keyCode==UP && flying==false){//如果沒有在飛的話,才能飛 vy = -20; flying = true; } } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; }8-9_mario_stand_box_and_fall物體撞到方塊的範圍變精準了,但站上方塊就下不來了//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; if(flying){//如果在飛行中 marioY += vy;//上下的位置會變 vy += 0.98;//重力加速度往下 if(marioY >=250){//碰到地板 marioY = 250; flying = false;//不再飛行 } } fill(255,0,0); ellipse(marioX,marioY,15,20); fill(229,119,42); rect(0,260,400,150); fill(229,119,42); rect(200,150,20,20); if(hitBox(200,150,20,20)){ if(vy>0){ marioY = 150-10; flying = false; stand_box = true; }else{ vy = 0; marioY = 150+20+10; } } if(stand_box == true && flying == false && leaveBox(200,150,20,20)){ stand_box = false; flying = true; vy = 0; } } boolean leaveBox(int x,int y,int w,int h){ if(x-7>marioX ||marioX>x+w+7) return true; else return false; } boolean hitBox(int x,int y,int w,int h){ if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true; else return false; } boolean flying = false, stand_box = false;//一開始沒有在飛!!! void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; if(keyCode==UP && flying==false){//如果沒有在飛的話,才能飛 vy = -20; flying = true; } } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; }站上方塊後可以掉下來了 8-A_mario_stand_box_and_fall//碰撞偵測: Mario vs. Pikachu //牛頓力學(1)靜者恆靜、動者恆動 (2)f=m*a 位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX += vx; if(flying){//如果在飛行中 marioY += vy;//上下的位置會變 vy += 0.98;//重力加速度往下 if(marioY >=250){//碰到地板 marioY = 250; flying = false;//不再飛行 } } fill(255,0,0); ellipse(marioX,marioY,15,20); fill(229,119,42); rect(0,260,400,150); drawTestBox(100,150,20,20); drawTestBox(200,150,20,20); drawTestBox(300,150,20,20); } void drawTestBox(int x,int y,int w,int h){ fill(229,119,42); rect(x,y,w,h); if(hitBox(x,y,w,h)){ if(vy>0){ marioY = y-10; flying = false; stand_box = true; }else{ vy = 0; marioY = y+h+10; } } if(stand_box == true && flying == false && leaveBox(x,y,w,h)){ stand_box = false; flying = true; vy = 0; } } boolean leaveBox(int x,int y,int w,int h){ if(x-7>marioX ||marioX>x+w+7) return true; else return false; } boolean hitBox(int x,int y,int w,int h){ if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true; else return false; } boolean flying = false, stand_box = false;//一開始沒有在飛!!! void keyPressed(){ if(keyCode==RIGHT) vx = 2; if(keyCode==LEFT) vx = -2; if(keyCode==UP && flying==false){//如果沒有在飛的話,才能飛 vy = -20; flying = true; } } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; }





沒有留言:
張貼留言