2024年11月25日 星期一

week12

week12


week12_01_libraries


1.聲音函式多教isplaying() 


程式碼


import processing.sound.*;

SoundFile sound1,sound2;

int playing = 2;


void setup() {

  size(640,360);

  background(255);

  sound1 = new SoundFile(this,"Intro Song_Final.mp3");

  sound2 = new SoundFile(this,"In Game Music.mp3");

}

void draw(){

  if(sound1.isPlaying()){

    playing=1;

  } else if(sound2.isPlaying()){//音樂2有沒有撥放

    playing=2;

  } else{

    if(playing==1) sound2.play();//換另外一首

    else sound1.play();

  }

}


week12_03_1_3_3_1_equation_mouseDragged_change_t



1.滑鼠控制小圓球再曲線上的移動


程式碼

//week12_03_1_3_3_1_equation_mouseDragged_change_t

void setup(){
  size(500,500);
}

PVector p0 = new PVector(340,80);
PVector p1 = new PVector(40,40);
PVector p2 = new PVector(360,360);
PVector p3 = new PVector(60,320);
float t = 0.0;

void draw(){
  background(255);
  noFill();
  stroke(255, 102, 0);
  line(340, 80, 40, 40);
  line(360, 360, 60, 320);
  stroke(0, 0, 0);
  bezier(340, 80, 40, 40, 360, 360, 60, 320);
  float x = p0.x * (1 - t) * (1 - t) * (1 - t)+ 3 * p1.x * (1 - t) * (1 - t) * t+ 3 * p2.x * (1 - t) * t * t+ p3.x * t * t * t;
  float y = p0.y * (1 - t) * (1 - t) * (1 - t)+ 3 * p1.y * (1 - t) * (1 - t) * t+ 3 * p2.y * (1 - t) * t * t+ p3.y * t * t * t;
  ellipse(x, y, 10, 10);
}

void mouseDragged(){
  t += 0.01 * (mouseX-pmouseX);
}


week12_04_bezier_for_t_t0_0_many_t





1.利用for迴圈做出很多球一起動

程式碼

//week12_04_bezier_for_t_t0_0_many_t

void setup() {
  size(400, 400);
}

PVector p0 = new PVector(120, 80);
PVector p1 = new PVector(320, 20);
PVector p2 = new PVector(320, 300);
PVector p3 = new PVector(120, 300);
float t0 = 0.0;

void draw() {
  background(255);
  size(400, 400);
  noFill();
  stroke(255, 102, 0);
  line(120, 80, 320, 20);
  line(320, 300, 120, 300);
  stroke(0, 0, 0);
  bezier(120, 80, 320, 20, 320, 300, 120, 300);
  for (float t= t0; t>=0; t-=0.025) {
    float x = p0.x * (1 - t) * (1 - t) * (1 - t)+ 3 * p1.x * (1 - t) * (1 - t) * t+ 3 * p2.x * (1 - t) * t * t+ p3.x * t * t * t;
    float y = p0.y * (1 - t) * (1 - t) * (1 - t)+ 3 * p1.y * (1 - t) * (1 - t) * t+ 3 * p2.y * (1 - t) * t * t+ p3.y * t * t * t;
    ellipse(x, y, 10, 10);
  }
}

void mouseDragged() {
  t0 += 0.01 * (mouseX-pmouseX);
}


week12_05_bezier_ArrayList_class_Ball_draw_ArrayList_add


1.複習ArrayList()和class

2.自動生球

3.還沒做消除球的機制


程式碼

//week12_05_bezier_ArrayList_class_Ball_draw_ArrayList_add


void setup() {

  size(400, 400);

}


PVector p0 = new PVector(120, 80);

PVector p1 = new PVector(320, 20);

PVector p2 = new PVector(320, 300);

PVector p3 = new PVector(120, 300);

float t0 = 0.0;

ArrayList<Ball>balls = new ArrayList<Ball>();


void draw() {

  background(255);

  size(400, 400);

  noFill();

  stroke(255, 102, 0);

  line(120, 80, 320, 20);

  line(320, 300, 120, 300);

  stroke(0, 0, 0);

  bezier(120, 80, 320, 20, 320, 300, 120, 300);

  for (Ball ball :  balls) {

    ball.draw();

  }

  if(frameCount%20==0) balls.add(new Ball(p0,p1,p2,p3));

}


void mouseDragged() {

  t0 += 0.01 * (mouseX - pmouseX);

}


class Ball {

  PVector p0, p1, p2, p3;

  float t = 0.0;


  Ball(PVector _p0, PVector _p1, PVector _p2, PVector _p3) {

    p0 = _p0;

    p1 = _p1;

    p2 = _p2;

    p3 = _p3;

  }


  void draw() {

    float x = p0.x * (1 - t) * (1 - t) * (1 - t) 

            + 3 * p1.x * (1 - t) * (1 - t) * t 

            + 3 * p2.x * (1 - t) * t * t 

            + p3.x * t * t * t;


    float y = p0.y * (1 - t) * (1 - t) * (1 - t) 

            + 3 * p1.y * (1 - t) * (1 - t) * t 

            + 3 * p2.y * (1 - t) * t * t 

            + p3.y * t * t * t;


    ellipse(x, y, 10, 10);

    t += 0.001;

  }

}


week12_06_bezier_ArrayList_size_get_remove


1.完善


程式碼


//week12_06_bezier_ArrayList_size_get_remove



void setup() {

  size(400, 400);
}



PVector p0 = new PVector(120, 80);

PVector p1 = new PVector(320, 20);

PVector p2 = new PVector(320, 300);

PVector p3 = new PVector(120, 300);

float t0 = 0.0;

ArrayList<Ball>balls = new ArrayList<Ball>();



void draw() {

  background(255);

  size(400, 400);

  noFill();

  stroke(255, 102, 0);

  line(120, 80, 320, 20);

  line(320, 300, 120, 300);

  stroke(0, 0, 0);

  bezier(120, 80, 320, 20, 320, 300, 120, 300);

  for (Ball ball : balls) {

    ball.draw();
  }

  if (frameCount%20==0) {
    balls.add(new Ball(p0, p1, p2, p3));
    println(balls.size());
  }
  if(balls.size()>0 && balls.get(0).t>1.0) balls.remove(0);
}



void mouseDragged() {

  t0 += 0.01 * (mouseX - pmouseX);
}



class Ball {

  PVector p0, p1, p2, p3;

  float t = 0.0;



  Ball(PVector _p0, PVector _p1, PVector _p2, PVector _p3) {

    p0 = _p0;

    p1 = _p1;

    p2 = _p2;

    p3 = _p3;
  }



  void draw() {

    float x = p0.x * (1 - t) * (1 - t) * (1 - t)

      + 3 * p1.x * (1 - t) * (1 - t) * t

      + 3 * p2.x * (1 - t) * t * t

      + p3.x * t * t * t;



    float y = p0.y * (1 - t) * (1 - t) * (1 - t)

      + 3 * p1.y * (1 - t) * (1 - t) * t

      + 3 * p2.y * (1 - t) * t * t

      + p3.y * t * t * t;



    ellipse(x, y, 10, 10);

    t += 0.001;
  }
}



沒有留言:

張貼留言