[Nature of Code] processing 4. 마우스를 향해 가속되는 객체들

2023. 2. 1. 00:13
반응형

 

Mover[] movers = new Mover[20];

void setup() {
  size(200, 200);
  smooth();
  background(77);
  for(int i=0; i<movers.length; i++){
    //배열을 초기화한다.
    movers[i] = new Mover();
  }
}

void draw() {
  background(99);
  
  for (int i=0; i<movers.length; i++){
    //배열 안에 있는 객체의 함수를 호출한다.
    movers[i].update();
    movers[i].checkEdges();
    movers[i].display();
  }
}

class Mover {
  PVector location;
  PVector velocity;
  PVector acceleration;
  float topspeed;
  
  Mover(){
    location = new PVector(random(width), random(height));
    velocity = new PVector(0,0);
    topspeed = 4;
  }
  
  //가속도와 관련된 코드가 들어있는 함수
  void update(){
    //마우스를 향하는 벡터를 생성
    PVector mouse = new PVector(mouseX, mouseY);
    PVector dir = PVector.sub(mouse, location);
    
    //벡터를 정규화함
    dir.normalize();
    
    //크기를 변경함
    dir.mult(0.5);
    
    //만들어진 벡터를 가속도로 설정
    acceleration = dir;
    
    //실제로 물체를 움직이는 코드.가속도로 속도를 변경하고, 속도로 위치를 변경
    velocity.add(acceleration);
    velocity.limit(topspeed);
    location.add(velocity);
  }
  
  void display(){
    stroke(0);
    fill(175);
    ellipse(location.x, location.y, 16, 16);
  }
  
  void checkEdges() {
    if(location.x > width){
      location.x = 0;
    } else if(location.x < 0){
      location.x = width;
    }
    if(location.y > height){
      location.y = 0;
    } else if(location.y < 0){
      location.y = height;
    }
  }
}

 

결과물

 

중력은 가까울 수록 강하게 작용해야 한다. 즉, 객체가 마우스에 가까워지면 가속도가 더 커진다.

반응형

BELATED ARTICLES

more