2021年11月22日 星期一

week07課程

 球體掉落

1.球體落下

float x=250,y=250;
void setup()
{
  size(500,600);
}
void draw()
{
  background(255);//防止殘影將背景設成白色
  ellipse(x,y,50,50);
  y++;//向下加速度
}

float x=250,y=250,vx=0,vy=3;//設立變數
void setup()
{
  size(500,600);
}
void draw()
{
  background(255);//防止殘影將背景設成白色
  ellipse(x,y,50,50);
  y = y + vy;//向下加速度
}

2.多個球體

float x=250,y=50,vx=0,vy=3;//設立變數
float x2=150,y2=50,vx2=0,vy2=1;//設立第二個變數
void setup()
{
  size(500,600);
}
void draw()
{
  background(255);//防止殘影將背景設成白色
  ellipse(x,y,50,50);
  ellipse(x2,y2,50,50);
  y = y + vy;//向下加速度
  y2 = y2 + vy2;//向下加速度
}

//改用陣列設定變數
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vx={0,0,0,0};
float []vy={3,2,2.5,4};
void setup()
{
  size(500,600);
}
void draw()
{
  background(255);//防止殘影將背景設成白色
  for(int i=0;i<4;i++)//使用for迴圈跑出4個球,再根據上方陣列有不同的呈現效果
  {
    ellipse(x[i],y[i],50,50);
    y[i] = y[i] + vy[i];//向下加速度
  }
}

3.反彈球體

//改用陣列設定變數
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vx={0,0,0,0};
float []vy={3,2,2.5,4};
void setup()
{
  size(500,600);
}
void draw()
{
  background(255);//防止殘影將背景設成白色
  for(int i=0;i<4;i++)//使用for迴圈跑出4個球,再根據上方陣列有不同的呈現效果
  {
    ellipse(x[i],y[i],50,50);
    y[i] = y[i] + vy[i];//向下加速度
    if(y[i]>600)vy[i]=-vy[i];//碰到下方
    if(y[i]<0)vy[i]=-vy[i];//碰到上方
  }
}

球體碰撞

1.距離碰撞

//改用陣列設定變數
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vx={0,0,0,0};
float []vy={3,2,2.5,4};
void setup()
{
  size(500,600);
}
void draw()
{
  background(255);//防止殘影將背景設成白色
  for(int i=0;i<4;i++)//使用for迴圈跑出4個球,再根據上方陣列有不同的呈現效果
  {
    if(dist(mouseX,mouseY,x[i],y[i])<=50)
    {
      continue;
    }
    fill(255,255,0);ellipse(x[i],y[i],50,50);
    y[i] = y[i] + vy[i];//向下加速度
    if(y[i]>600)vy[i]=-vy[i];//碰到下方
    if(y[i]<0)vy[i]=-vy[i];//碰到上方
  }
  fill(255,0,0);ellipse(mouseX,mouseY,50,50);
}

//改用陣列設定變數
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vx={0,0,0,0};
float []vy={3,2,2.5,4};
boolean[]dead={false,false,false,false};//false 0,true 1
void setup()
{
  size(500,600);
}
void draw()
{
  background(255);//防止殘影將背景設成白色
  for(int i=0;i<4;i++)//使用for迴圈跑出4個球,再根據上方陣列有不同的呈現效果
  {
    if(dist(mouseX,mouseY,x[i],y[i])<=50)//距離判斷
    {
      dead[i]=true;
    }
    if(dead[i]==true)continue;//死了就continue跳下一個
    fill(255,255,0);ellipse(x[i],y[i],50,50);
    y[i] = y[i] + vy[i];//向下加速度
    if(y[i]>600)vy[i]=-vy[i];//碰到下方
    if(y[i]<0)vy[i]=-vy[i];//碰到上方
  }
  fill(255,0,0);ellipse(mouseX,mouseY,50,50);
}

2.boolean練習

boolean down=true;
void setup()
{
  size(500,300);
}
void draw()
{
  if(mousePressed)down=true;
  else down=false;
  if(down)background(255,0,0);
  else background(0,255,0);
}

3.class物件練習

//使用class物件
class Ball{//發明Ball物件
  float x,y,vx,vy;
  boolean dead;
  Ball(){//建構同名的東西
    x = random(500);
    y = random(100,200);
    vy = random(3,4);
    dead = false;//沒有死掉
  }
  void draw(){
    if(dead==true)return;
    ellipse(x,y,50,50);
    if(dist(mouseX,mouseY,x,y)<50){
      dead=true;
    }
    y = y + vy;
    if(y>500)vy = -vy;
    if(y<0)vy = -vy;
  }
}
Ball[]balls;
void setup(){
  size(500,500);
  balls = new Ball[20];
  for(int i=0;i<20;i++){
    balls[i]= new Ball();
  }
}
void draw(){
  background(255);
  for(int i=0;i<20;i++){
    balls[i].draw();
  }
}






沒有留言:

張貼留言