第一節課
今天要試試看在processing裡用碰撞偵測(馬力歐&皮卡丘打排球)。
week08-1
寫一個程式讓小球往右下角走(先沒有碰撞)。
加上一個重力加速度(一開始初速度往上,重力往下)。
用if判斷範圍,超過就設成指定的參數(看有沒有到指定的位置)。
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 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){ y=350; } ellipse(x,y,10,10); }
寫程式讓馬力歐可以透過鍵盤左右移動(還不能停下來,也還沒設定跳躍)。
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 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,10,20); fill(229,119,42); rect(0,260,400,150); } void keyPressed(){ if(keyCode==RIGHT) vx=2; if(keyCode==LEFT) vx=-2; }
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 void setup(){ size(400,400); } float marioX=50,marioY=250,vx=0,vy=0; void draw(){ background(108,137,255); marioX+=vx; marioY+=vy; fill(255,0,0); ellipse(marioX,marioY,10,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; }
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 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,10,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; }
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 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,10,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; }
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 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,10,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){ vy=0; marioY=150; 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; } 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; }
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 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,10,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){ vy=0; marioY=150; 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; }
//牛頓力學(1)靜者恆靜、動者恆動(2)f=ma、位置、速度、加速度 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,10,20); fill(229,119,42); rect(0,260,400,150); drawTestBox(200,150,20,20); drawTestBox(100,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; stand_box=false; } } void keyReleased(){ if(keyCode==LEFT||keyCode==RIGHT) vx=0; }
沒有留言:
張貼留言