Silverback9

#야생으로

Creative Coding 독학 제098일 2024년07월03일(수)

오늘은 시원한 샤워 물방울들을 표현하는 프로그램을 만들어 보겠습니다~^^*

잠시 천장을 올려다 보시며 머리 위로 쏟아지는 물방울들을 상상해 보셔요~~^^*

쏘ㅑ~~~ 쏘ㅑ~~~ 쏘ㅑ~~~

음…근데…뭔가 업사이드다운된 이미지의 기시감이 느껴지시지 않나요?

네!!!

수중공기정화장치의 공기 방울들이 바닥에서 수면 위로 올라가며 사라지듯이

해바라기 샤워 물방울들은 천장에서 쏟아져 내려가며 사라지네요!

그렇습니다!!!

지난 번에 공부했던 수중공기정화장치 프로그램의 응용/복습이라고 할 수도 있을 것 같아요!

<복습: 같은 점>

하나. 방울을 계속 생성해요.

둘. 점점 투명하게 만들어요.

셋. 투명하게 된 방울은 방울 배열에서 삭제해요.

<응용: 다른 점>

하나. 캔버스 화면 위쪽 부분에서 생성이 되어요.

둘. 캔버스 화면 아래 방향으로 이동을 해요.

<혹시 기억하고 계셔요?>

방울의 투명도가 0인지를 점검하여 삭제하는 과정은,

배열의 맨 뒷부분에서 앞으로 나아가며 진행이 되어요!

아!! 네~~!!

거의 비슷한 프로그램을 다시 공부하는 이유가 궁금하시다구요~?^^*

그것은 바로~~!!!!

오늘부터 우리는 입자를 본격적으로 공부할 것인데요~~!!! 그 기초를 다시 잘 다지기 위해서 복습/응용 프로그램을 만들어 보게 되는 것 같아요~~!!!

아래 동영상 강의를 클릭하시면 오늘 공부 내용을 보실 수 있어요~^^*

그럼 이제 코드를 살펴 볼까요~^^*

라벤더 향기와 빛을 품은 물방울이, 욕실 벽과 바닥에 닿으면 튀기도 하면서, 자연스럽게 투명하게 사라지는 여름 샤워를 표현해 보았습니다~.

자세한 내용은 주석을 참고 하셔도 좋을 것 같아요~~^^*

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.2.0/p5.min.js"></script>
    <link rel="stylesheet" type="text/css" href="style.css">
    <meta charset="utf-8" />

  </head>
  <body>
    <script src="particle.js"></script>
    <script src="sketch.js"></script>
  </body>
</html>
class Particle {
  constructor(x, y) {
    this.pos = createVector(x, y);
    this.vel = p5.Vector.random2D();
    this.vel.mult(random(5, 1));
    this.acc = createVector(0, 0);
    this.r = 4;
    this.lifetime = 255;
  }

  finished() {
    return this.lifetime < 0;
    //물방울이 완전히 투명하면, TRUE값을 반환합니다~.
  }

  applyForce(force) {
    this.acc.add(force);
  }

  edges() {
    if (this.pos.y >= height - this.r) {
      this.pos.y = height - this.r;
      this.vel.y *= -1;
    }

    if (this.pos.x >= width - this.r) {
      this.pos.x = width - this.r;
      this.vel.x *= -1;
    } else if (this.pos.x <= this.r) {
      this.pos.x = this.r;
      this.vel.x *= -1;
    }
    //욕실 벽과 바닥에 물방울이 닿으면 튀어 오릅니다~. 
  }

  update() {
    this.vel.add(this.acc);
    this.pos.add(this.vel);
    this.acc.set(0, 0);

    this.lifetime -= 5;
    //물방울을 점점 투명하게 만들겠습니다~
  }

  show() {
    stroke(this.lifetime,this.lifetime, 255 + this.lifetime, this.lifetime);
    strokeWeight(2);
    fill(this.lifetime,this.lifetime, 255 + this.lifetime, this.lifetime);

    ellipse(this.pos.x, this.pos.y, this.r * 2);
    //라벤더 향기 품고 점점 투명해지는 여름 샤워 물방울 어떠셔요~^^*
  }
}
let particles = [];

function setup() {
  createCanvas(400, 400);
}

function draw() {

  background(200,200,255);
  //여름 별장 욕실은 역시 연보라~~ 라벤더 빛~~
  
  for (let i = 0; i < 10; i++) {
    particles.push(new Particle(200, 20));
    //한 번에 물방울 10개씩 만들어, 풍성한 해바라기 샤워를 즐겨 볼까요~^^*
  }

  for (let particle of particles) {
    let gravity = createVector(0, 0.2);
    particle.applyForce(gravity);
    particle.update();
    particle.edges();
    particle.show();
    //물방울은 중력의 영향을 받고, 아래로 움직이며, 욕실 벽과 바닥에 닿으면 튀기도 하면서,새하얀 빛이 라벤더 빛으로 바뀌면서 점점 투명해져요~^^*
  }

  for (let i = particles.length - 1; i >= 0; i--) {
    if (particles[i].finished()) {
      particles.splice(i, 1);
    }
    //물방을 배열을 맨 뒤에서부터 앞으로 나아가며 물방울의 투명도를 점검하여, 물방울이 투명하면, 물방울 배열에서 삭제할게요~^^*
    //우리 컴퓨터 일손을 조금이라도 덜어줄게요~^^*
  }
}

자~ 이제~ 여름 샤워를 즐겨 볼까요~~^^* 향긋하고 시원한 라벤더 향과 빛을 지닌 샤워를 느긋하고 개운하게 즐겨 보셔요~~^^*

아침의 커튼을 설레며 여는 시원한 샤워~

저녁의 커튼을 단정히 닫는 따뜻한 샤워~

회복과 재생과 변신의 힘을 얻는 빛의 샤워~^^*

오늘도 설레고 단정하고 빛나는 샤워를 누리는 하루 보내시기 바래요~^^*

오늘도 저와 함께 코딩 공부 해주셔서 감사합니다~^^*

우리 내일 또 만나서 코딩 공부해요~~^^*

네!!! 꿈은 이루어 집니다!!!

댓글 남기기