blog10

Processing – オブジェクトをArrayで管理 (雪景色)

雪片がヒラヒラと落ちてくる様子を表現しました。

  • 遠くの雪は小さく描画し、ゆっくりと落下、
  • 近くの雪は大きく描画し、より早く落下

とすることで奥行を表現しようとしたのですが、あまり効果はなかったようです。

class Snow {
  float x, y, s, theta;
  Snow(float x, float y){
    this.x = x;
    this.y = y;
    this.s = random(20, 40);
    this.theta = random(360);
  }
  
  void paint(){
    y += s / 30;
    pushMatrix();
    float offset = s * sin(y/50);
    translate(x + offset, y);
    theta += 1;
    rotate(radians(theta));
    image(snowImage, 0, 0, s, s);
    popMatrix();
  }
}

PImage snowImage;
ArrayList<Snow> snows = new ArrayList<Snow>();

void setup(){
  size(600, 600);
  imageMode(CENTER);
  snowImage = loadImage("snow.png");  
}

void draw(){
  if(frameCount % 40 == 0){
    Snow s = new Snow(random(width), 0);
    snows.add(s);
  }
  background(0);
  for(Snow s : snows){
    s.paint();
  }
}
Categories: Programming