解壓縮processing4.3
解決牛頓力學,有殘影往左下角:
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; } 增加位置、重力加速度: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判斷: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){ y=350; } ellipse(x,y,10,10); }能量耗損,速度變慢: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){ y=350; vy=-vy*0.5;//能量耗損 } ellipse(x,y,10,10); } 抖動: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){ y=350; vy=-vy*0.5;//能量耗損 vx=vx*0.8; } ellipse(x,y,10,10); } mario左右移動: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,20); fill(229,119,42);rect(0,260,400,150); } void keyPressed(){ if(keyCode==RIGHT)vx=2; if(keyCode==LEFT)vx=-2; } 增加往上鍵,mario飛起來了: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,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; } 增加重力加速度往下,碰到地板,不再飛行回到地面: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; } 如果沒有在飛,才能在跳: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; } 增加箱子碰撞偵測: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; } 增加站在箱子上的程式碼: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;//10邊界flying=false; }else{ vy=0; marioY=150+20+10;//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;//加7 -7mario身體 +10 -10上下邊界 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; } 離開box會下落: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;//加7 -7mario身體 +10 -10上下邊界 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; } 修改簡化程式碼,增加箱子: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); drawAndTextBox(200,150,20,20); drawAndTextBox(100,150,20,20); drawAndTextBox(300,150,20,20); } void drawAndTextBox(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;//加7 -7mario身體 +10 -10上下邊界 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; }













沒有留言:
張貼留言