2023年11月2日 星期四

m week08

 week08

碰撞偵測
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; //重力加速度
}

碰到地板
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);
}

物體會反彈
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);
}

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; //能量耗損、速度變慢
    vx = vx * 0.8; 
    }
    ellipse(x, y, 10, 10);
}

馬力歐能左右移動,並加上背景
void setup(){
  size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
  background(102,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;
}

馬力歐能往左往又跑,手放開時會停下,但按上時會跑掉
void setup(){
  size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
  background(102,137,255);
  marioX += vx;
  marioY += vy;
  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;
  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(102,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,25);
  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(102,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,25);
  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(102,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,25);
  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;
}
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(102,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,25);
  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;
}

修改程式碼
void setup(){
  size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
  background(102,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,25);
  fill(229,119,42); rect(0, 260, 400, 150);
  drawAndTestBox(100, 150, 20, 20);
  drawAndTestBox(200, 150, 20, 20);
  drawAndTestBox(300, 150, 20, 20);
}
void drawAndTestBox(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; //現在有2個變數,都要處理
  }
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
}







沒有留言:

張貼留言