Week08-1 NEWTON1
開啟processing,輸入以下程式碼
//碰撞偵測: 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;
}
命名week08_01_newton_vx_vy
球往右下跑
Week08-2 NEWTON2 F=MA
開啟processing,輸入以下程式碼
//碰撞偵測: Mario vs. Pikachu //牛頓力學 (1)靜者恆靜、動者恆動(2)f=ma位置 速度 加速度 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; //重力加速度 }
命名week08_02_newton_gravity
加速度來製造拋物線
Week08-3 NEWTON3 FLOOR
開啟processing,輸入以下程式碼
//碰撞偵測: Mario vs. Pikachu
//牛頓力學 (1)靜者恆靜、動者恆動(2)f=ma位置 速度 加速度
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; //重力加速度
if(y>350){//利用if判斷有沒有碰到地板
y=350;
vy=-vy*0.5; //能量耗損 速度變慢
vx= vx*0.8;
}
}
命名week08_03_newton_floor
設Y來製造地板
還有能量耗損
Week08-4 MARIO1
開啟processing,輸入以下程式碼
//碰撞偵測: Mario vs. Pikachu //牛頓力學 (1)靜者恆靜、動者恆動(2)f=ma位置 速度 加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=2,vy=-20; void draw(){ background(108,137,255); marioX += vx; fill(255,0,0); ellipse(marioX,marioY,15,20); fill(299,119,42); rect(0,260,400,150); } void keyPressed(){ if(keyCode==RIGHT) vx= 2; if(keyCode==LEFT) vx= -2; }
命名week08_04_mario_keyCode_UP_RIGHT_LEFT
小人可以左右控制但不會停下來
Week08-5 MARIO2
開啟processing,輸入以下程式碼
//碰撞偵測: Mario vs. Pikachu 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(299,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; }
命名week08_05_mario_keyReleased
左右可以停下控制 但上會直接飛走
Week08-6 MARIO3 FLYING
開啟processing,輸入以下程式碼
//碰撞偵測: Mario vs. Pikachu 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(299,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; }
命名week08_06_mario_flying_vy098
flying來控制UP鍵的飛行
Week08-7 MARIO4 HITBOX
開啟processing,輸入以下程式碼
//碰撞偵測: Mario vs. Pikachu 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(299,119,42); rect(0,260,400,150); fill(299,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; }
命名week08_07_mario_hitbox_if
用hitBox來做碰撞測試 如果碰到BOX就掉下來
Week08-8 MARIO5 ONBOX
開啟processing,更改以下程式碼
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; }
命名week08_08_mario_diretion_stand_fall
可以站在BOX上,但掉不下來
Week08-9 MARIO6
開啟processing,輸入以下程式碼
//碰撞偵測: Mario vs. Pikachu 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(299,119,42); rect(0,260,400,150); fill(299,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; }
沒有留言:
張貼留言