2023年11月2日 星期四

week08咻消失

 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;
}



  

  





沒有留言:

張貼留言