見出し画像

Processingで文字の雨を降らせる


はじめに

先週、電子アートに使われるProcessingでホームページの背景動画を作成したので、そのときの記録を残しておく

よく分からなかったら、ChatGPTにコードを書いてもらうといい。僕も最初、書いてもらってから感じをつかんで改造した

結果

実装

sample.pde

// 落下する文字
int NUM = 20;
char[] c = new char[NUM];
float[] x_position = new float[NUM];
float[] y_position = new float[NUM];

// 色
color[] colors = new color[NUM];

// 速度
float[] s = new float[NUM];

//frame
int f = 1;
int value=30;

void setup() {
  //size(1280, 670); // noteの記事見出し画像のサイズを設定
  size(640, 480);
  for(int i = 0; i< NUM; i++){
    c[i]=char(int(random(32, 127)));
    x_position[i]=random(width);
    colors[i] = color(random(255), random(255), random(255), 128);
    s[i]=random(2,5);
  }
  frameRate(value); // 秒間24フレーム
}

void draw() {
  
  // +1秒で終了
  if (f>=value*5+value){
    
    exit();
    
  // 5秒
  }else if(f>=value*5){
    
    background(0);
  
  }else{
    
    background(0); // 背景を黒に設定 255→白
    textSize(64); // テキストサイズを設定
    fill(50,128); // 色とα値

    // 表示
    for(int i = 0; i< NUM; i++){
      text(c[i], x_position[i], y_position[i]);
    }
    
    // 落下速度
    for(int i = 0; i< NUM; i++){
       y_position[i] = y_position[i] + s[i] * s[i];//random(5,10) * random(1,3);
    }
    
    // 画面の下端に達したら再度ランダムな位置に配置する
      for(int i = 0; i< NUM; i++){
  
      if (y_position[i] > height) {
        x_position[i] = random(width);
        y_position[i] = 0;
        text(c[i], x_position[i], y_position[i]);
        c[i]=char(int(random(32, 127)));
     }
    }
    
  }
  
  // frame DIRにpngを保存する
  saveFrame("frames/#####.png");
  //fpsで秒数をカウント
  f = f + 1;
  
}

他にもカラーにしてみたり

少し、コードを変更してあげるだけで印象が変わるのは面白い

for(int i = 0; i< NUM; i++){
      text(c[i], x_position[i], y_position[i]);/
      // 追加
      fill(colors[i]);
}
// 表示
    for(int i = 0; i< NUM; i++){
      text(c[i], random(width), random(height));
      fill(colors[i]);
}

/*
 // 表示
for(int i = 0; i< NUM; i++){
      text(c[i], x_position[i], y_position[i]);
      fill(colors[i]);
}

// 落下速度
for(int i = 0; i< NUM; i++){
      y_position[i] = y_position[i] + s[i] * s[i];//random(5,10) * random(1,3);
}
*/

恐らく、数学的な考え方と想像力で色々と楽しいデモが作れるかと。僕はあまり、その手の思考力がないため、アートぽいものは作れないが、楽しいので時間があるときに取り組んではいかがだろうか?

また、p5.jsというJavaScriptで表示できるツールもあるのだが、Webサイトに貼ろうとしたらCSSで配置など処理する方法が、腑に落ちなかったのでgifを読み込ませるようにした。ちなみにChatGPTにProcessingのソースコードから、p5.jsのコードにマイグレーションしてくれといったら、意外にも動作するコードがアウトプットされた。少し、手直しは必要だったがコードを変換することは得意なのかもしれない

a キーを押すと、gifを読み込み、cキーで解除するようにした

おわり!