Processingやってみた

Processingという言語がある.Javaで作られた実行環境上で動く超簡単な言語らしい.手軽に図を書いたり,音鳴らしたり,WebCamの画像処理したりできるぽい.
こことかこことかが参考になるかも.

Processingを知ったきっかけは,本屋で

ビジュアライジング・データ ―Processingによる情報視覚化手法

ビジュアライジング・データ ―Processingによる情報視覚化手法

を見つけて.膨大なデータ可視化とかが簡単にできるの?と思って色々調べてみた(本は買ってない…).

で,Webで調べながら適当にコード書いてみた.基本的には文法はJavaと同じ.void setup();やvoid draw();の関数を記述すると,一発実行して終了ではなく,処理がループされるようになる.Javaでいうところの,Runnableをimplementして,run()の中でwhileループ回してる状態.そのrun()の冒頭でsetup()が実行され,つづけてwhile文の中で,上記draw()が呼び続けられるイメージ.

イベントハンドラ的なものもあって,マウスイベントやキーイベントなどは,それ用の関数(例えばvoid mousePressed())を定義するだけでOK.

簡単な例を作ったので貼っておく.

int[] x,y,u,v; // 配列の宣言.Javaと同じ
int width, height; // 変数の宣言
int num=100; // 変数の宣言と初期化
int mouseselect;

// 初期化陽関数
// 実行時,一度だけ呼ばれるっぽい
void setup()
{
  mouseselect=0;
  width=640;
  height=480;
  size(width,height);
  // 配列の初期化.Javaと同じ
  x=new int[num];
  y=new int[num];
  u=new int[num];
  v=new int[num];
  for(int i=0;i<num;i++){ // forループ.()内でループ用の変数を宣言できる
    x[i]=0;
    y[i]=0;
    u[i]=5;
    v[i]=5;
  }
}

// 自前の関数
void drawInit(){
  background(0);
  text("クリックするとマウスの位置へボールが移動",300,200);
}

// 自前の関数.戻り値,引数とも自由にできそう
void drawPoints(int i){
  if(x[i]<0 || x[i]>=width)u[i]*=-1;
  if(y[i]<0 || y[i]>=height)v[i]*=-1;
  x[i]+=u[i];
  y[i]+=v[i];
  ellipse(x[i],y[i],30,30);
}

// 画面描画用の関数
// 常に繰り返し呼ばれる?
void draw()
{
  drawInit();
  for(int i=0;i<num;i++) drawPoints(i);
}

// マウスイベント(mousePressed)の関数
// マウスPress後に呼ばれる
void mousePressed()
{
  mouseselect+=1;
  if(mouseselect>=num) mouseselect=0;
  x[mouseselect]=mouseX;
  y[mouseselect]=mouseY;
}