2022年1月3日 星期一

Noteeee Week17

🍞Week17🍞

[1/3(一)]


今天請教了老師畫面轉動和回收板子問題!!

程式碼: 

//Doodle Jump製作步驟: (1)jumping主角 (2)跳起來 (3)卡住 (4)畫面捲動

PImage imgBoard01,imgBack;

float x=150, y=500-18, vx=0, vy=0;

boolean jumping=false;

boolean left=false;//左

boolean right=false;//右


float []boardX=new float[10];

float []boardY=new float[10];

int landing=0;//停在哪一個板子上

void setup()

{

    size(300,500);

    imgBoard01 = loadImage("board01.png");

    imgBack = loadImage("background.png");

    for(int i=0; i<10; i++)

    {

      boardX[i]=random(0,300-67);

      boardY[i]=i*45;

    }

 

}

float rolling=0;

void draw()

{

  image(imgBack,0,0,300,500);

  ///background(255);

  

  for(int i=0; i<10; i++)

  {

    //rect(boardX[i],boardY[i], 80, 15); //最原本

    //rect(boardX[i],450-boardY[i]+rolling, 64, 18);//改過(但板子會有邊角)

    image(imgBoard01, boardX[i], 450-boardY[i]+rolling);//再改(板子沒有邊角了,成功)

    //if(boardY[i]+rolling<0) 

    //{

      //boardX[i]=random(0,300-67);

      //boardY[i]=boardY[i]+350;

    //}

  }

  ellipse(x,y+rolling,15,15);

  if(left)  x -= 0.8;

  if(right) x += 0.8;

  //x += vx;

  

  if(x< boardX[landing] || boardX[landing]+67<x) jumping=true;//landing=i;//停在哪一個板子上, 超過了,掉下來

  y += vy; 

  if(jumping) vy += 0.98;//重力加速度(往下的速度)

  if(y>500-18) y=500-18;//地板

  if(vy>=0)

  {//(0)往下,才有可能卡住

    for(int i=0; i<10; i++)

    {

      if(boardX[i] < x && x < boardX[i]+67)//(1)x: 板子的左右邊界符合(主角在板子裡)

      {

        if(y< boardY[i]+rolling && y+vy > boardY[i]+rolling)//(2)y: 上下符合,從板子上,往板子下穿越

        {

          landing=i;

          jumping=false;

          vy=0;

          y = boardY[i];

        }

      }

    }

  }

  

  

  ///for(int i=0; i<10; i++)

  {

    //image(imgBoard01, boardX[i], 450-boardY[i]+rolling);

    

  }

  //rolling+=1.5;

}

void keyPressed()

{

  if(keyCode==UP)

  {//(2)跳起來

    vy = -20; jumping=true; //往上的速度,負的越多,跳的越慢

  }

  if(keyCode==LEFT)

  { 

    vx = -0.8; left=true; right=false; //負越多,跑越快

  }

  if(keyCode==RIGHT)

  {

    vx = 0.8;  right=true; left=false;

  }

}

*解決畫面轉動和回收板子問題👇

程式碼:

//Doodle Jump製作步驟: (1)jumping主角 (2)跳起來 (3)卡住 (4)畫面捲動

PImage imgBoard01,imgBack;

float x=150, y=500-18, vx=0, vy=0;

boolean jumping=false;

boolean left=false;//左

boolean right=false;//右


float []boardX=new float[11];

float []boardY=new float[11];

int landing=0;//停在哪一個板子上

void setup()

{

    size(300,500);

    imgBoard01 = loadImage("board01.png");

    imgBack = loadImage("background.png");

    for(int i=0; i<11; i++)

    {

      boardX[i]=random(0,300-67);

      boardY[i]=i*45;

    }

 

}

float rolling=0;

void draw()

{

  image(imgBack,0,0,300,500);

  ///background(255);

  

  for(int i=0; i<11; i++)

  {

    if(boardY[i]+rolling>500){

      boardY[i]-=495;

      boardX[i]=random(0,300-67);

    }

    //rect(boardX[i],boardY[i], 80, 15); //最原本

    //rect(boardX[i],450-boardY[i]+rolling, 64, 18);//改過(但板子會有邊角)

    image(imgBoard01, boardX[i], boardY[i]+rolling);//再改(板子沒有邊角了,成功)

    //if(boardY[i]+rolling<0) 

    //{

      //boardX[i]=random(0,300-67);

      //boardY[i]=boardY[i]+350;

    //}

  }

  ellipse(x,y,15,15);

  if(left)  x -= 0.8;

  if(right) x += 0.8;

  //x += vx;

  

  if(x< boardX[landing] || boardX[landing]+67<x) jumping=true;//landing=i;//停在哪一個板子上, 超過了,掉下來

  y += vy; 

  if(jumping) vy += 0.98;//重力加速度(往下的速度)

  if(y>500-18) y=500-18;//地板

  if(vy>=0)

  {//(0)往下,才有可能卡住

    for(int i=0; i<11; i++)

    {

      if(boardX[i] < x && x < boardX[i]+67)//(1)x: 板子的左右邊界符合(主角在板子裡)

      {

        if(y< boardY[i]+rolling && y+vy > boardY[i]+rolling)//(2)y: 上下符合,從板子上,往板子下穿越

        {

          landing=i;

          jumping=false;

          vy=0;

          y = boardY[i]+rolling;//boardY[i];

        }

      }

    }

  }

  

  

  ///for(int i=0; i<10; i++)

  {

    //image(imgBoard01, boardX[i], 450-boardY[i]+rolling);

    

  }

  //rolling+=1.5;

  if(y<250){

    float diff=250-y;

    rolling += diff;

    y = 250;

  }

}

void keyPressed()

{

  if(keyCode==UP)

  {//(2)跳起來

    vy = -20; jumping=true; //往上的速度,負的越多,跳的越慢

  }

  if(keyCode==LEFT)

  { 

    vx = -0.8; left=true; right=false; //負越多,跑越快

  }

  if(keyCode==RIGHT)

  {

    vx = 0.8;  right=true; left=false;

  }

}

*最後解決了邊界問題!!(很有成就感😭😭

程式碼:
//Doodle Jump製作步驟: (1)jumping主角 (2)跳起來 (3)卡住 (4)畫面捲動
PImage imgBoard01,imgBack;
float x=150, y=500-18, vx=0, vy=0;
boolean jumping=false;
boolean left=false;//左
boolean right=false;//右

float []boardX=new float[11];
float []boardY=new float[11];
int landing=0;//停在哪一個板子上
void setup()
{
    size(300,500);
    imgBoard01 = loadImage("board01.png");
    imgBack = loadImage("background.png");
    for(int i=0; i<11; i++)
    {
      boardX[i]=random(0,300-67);
      boardY[i]=i*45;
    }
 
}
float rolling=0;
void draw()
{
  image(imgBack,0,0,300,500);
  ///background(255);
  
  for(int i=0; i<11; i++)
  {
    if(boardY[i]+rolling>500){
      boardY[i]-=495;
      boardX[i]=random(0,300-67);
    }
    //rect(boardX[i],boardY[i], 80, 15); //最原本
    //rect(boardX[i],450-boardY[i]+rolling, 64, 18);//改過(但板子會有邊角)
    image(imgBoard01, boardX[i], boardY[i]+rolling);//再改(板子沒有邊角了,成功)
    //if(boardY[i]+rolling<0) 
    //{
      //boardX[i]=random(0,300-67);
      //boardY[i]=boardY[i]+350;
    //}
  }
  ellipse(x,y,15,15);
  if(left)  x -= 0.8;
  if(right) x += 0.8;
  //x += vx;
  
  if(x< boardX[landing] || boardX[landing]+67<x) jumping=true;//landing=i;//停在哪一個板子上, 超過了,掉下來
  if(x < 0) x+=300;//超過左邊界,從右邊界回來
  if(x > 300) x-=300;//超過右邊界,從左邊界回來
  y += vy; 
  if(jumping) vy += 0.98;//重力加速度(往下的速度)
  if(y>500-18) y=500-18;//地板
  if(vy>=0)
  {//(0)往下,才有可能卡住
    for(int i=0; i<11; i++)
    {
      if(boardX[i] < x && x < boardX[i]+67)//(1)x: 板子的左右邊界符合(主角在板子裡)
      {
        if(y< boardY[i]+rolling && y+vy > boardY[i]+rolling)//(2)y: 上下符合,從板子上,往板子下穿越
        {
          landing=i;
          jumping=false;
          vy=0;
          y = boardY[i]+rolling;//boardY[i];
        }
      }
    }
  }
  
  ///for(int i=0; i<10; i++)
  {
    //image(imgBoard01, boardX[i], 450-boardY[i]+rolling);
    
  }
  //rolling+=1.5;
  if(y<250){
    float diff=250-y;
    rolling += diff;
    y = 250;
  }
}
void keyPressed()
{
  if(keyCode==UP)
  {//(2)跳起來
    vy = -20; jumping=true; //往上的速度,負的越多,跳的越慢
  }
  if(keyCode==LEFT)
  { 
    vx = -0.8; left=true; right=false; //負越多,跑越快
  }
  if(keyCode==RIGHT)
  {
    vx = 0.8;  right=true; left=false;
  }
}


沒有留言:

張貼留言