EclipseでProcessingを動かす

参考サイト(英語)→http://processing.org/learning/tutorials/eclipse/
Eclipseを導入してからのお話です。

新しいプロジェクトを作る

File→New→ProjectでJava Projectを作成。

ライブラリの追加

processing/lib/core.jarがprocessingのコアライブラリのようです。これをEclipseに追加します。
File→Import→General→File System→Browsでフォルダ選択できるのでprocessing\libフォルダを選択します。
例えばProgram Filesにprocessingを導入したなら下のフォルダを選択します。
C:\Program Files\processing\lib

画面にライブラリ一覧が表示されるので、core.jarを選択します。プロジェクトツリーの中にcore.jarが加わりました。

ビルドパスを通す

追加されたcore.jarを選択して右クリック→BUILD PATH→ADD TO BUILD PATH で作業完了です。

processingを動かす

FILE → NEW → CLASSで HelloProcessingという名前を入力すると、HelloProcessingというクラスができます。
プログラムを書く前に、core.jarをインポートする必要があります。

import processing.core.*;

最もシンプルなクラスのひな形はこんな感じです。

import processing.core.*;
public class HelloProcessing extends PApplet {
  public void setup()
  {
     //ここで初期化
  }
  public void draw()
  {
     //ここで描画
  }
}

作品をつくってみましょう。

import processing.core.*;

public class HelloProcessing extends PApplet {

  public void setup()
  {
      size(400, 400);
      background(0, 0, 0);
      smooth();
      strokeWeight(5);
  }
  public void draw()
  {
	  noStroke();
	  fill(0,10);
	  rect(0,0,width,height);
	  stroke(255);
		if (mousePressed) {
		line(mouseX,mouseY,pmouseX,pmouseY);
    }
  }
}

完成したら、RUN→ RUN AS→JAVA APPLETでウインドウが現れて描いた絵が表示されます。

アプリケーションの作成

作成したクラスのメソッドにmainを追加します。

  public static void main(String args[]){
	    PApplet.main(new String[] { "--present", "HelloProcessing" });
  }

引数は、もしパッケージを作成していないなら"作成したクラス名"
パッケージを作ってその中に作成したクラスなら、"パッケージ名.クラス名"と書きます。
例えば、パッケージ"root"を作ってrootの中にHelloProcessingクラスを作成したとしましょう。

package root;
import processing.core.*;
public class HelloProcessing extends PApplet {

このときは"root.HelloProcessing"と書きます。
あとはRUN →RUN AS→JAVA APPLICATION でアプリケーションとして実行することができます。

import processing.core.*;
public class HelloProcessing extends PApplet {
  public void setup()
  {
      size(400, 400);
      background(0, 0, 0);
      smooth();
      strokeWeight(5);
  }
  public void loop(){

  }
  public void draw()
  {
	  noStroke();
	  fill(0,10);
	  rect(0,0,width,height);
	  stroke(255);
		if (mousePressed) {
		line(mouseX,mouseY,pmouseX,pmouseY);
    }
  }
  public static void main(String args[]){
	    PApplet.main(new String[] { "--present", "HelloProcessing" });
	}
}

クラスの追加方法

円を描くためのCircleクラスを追加してみます。

public class Circle {
	Circle() {
	}
	void draw() {
		fill(255,100);
		noStroke();
		float x=random(0,width);
		float y=random(0,height);
		ellipse(x,y, 40, 40);
	}
}

このままでは、PAppletについて何も知らないので、fillやrandomメソッドを呼び出すことはできません。
まずPAppletをインポートします。

import processing.core.PApplet;

実行するとPApplet(アプレットそのもの)が一つ作られるので、その参照をCircleクラスに教える必要があります。
Circleクラスは自分が描かれるPAppletについて常に知っている必要があるので、メンバ変数としてPAppletを持つことにします。

public class Circle {
	PApplet parent;

他のクラスや本体からCircleクラスを作成する際に、コンストラクタの引数を通してPAppletの参照を教えてもらうことにします。

public class Circle {
	PApplet parent;
	Circle(PApplet p) {
		    parent = p;
	}

あとはparentを通してPAppletのメソッドを呼び出すことができるようになります。
メソッドを使うときは、

parent.width
parent.fill(255,100);

などのように書きます。

Circleクラスを利用する

Circleクラスをmainから利用するには、PAppletつまり自分自身をCircleに伝えないといけないので、thisをコンストラクタに渡します。

Circle circle = new Circle(); //誤
Circle circle = new Circle(this); //正

あとはそのままメソッドを利用することができます。

circle.draw();

最初の例に円の描画を追加したものです。

Circle.java
import processing.core.PApplet;

public class Circle {
	PApplet parent;
	Circle(PApplet p) {
		    parent = p;
	}
	void draw() {
		parent.fill(255,50);
		parent.noStroke();
		float x=parent.random(0,parent.width);
		float y=parent.random(0,parent.height);
		float r=parent.random(1,20);
		parent.ellipse(x,y, r, r);
	}
}
HelloProcessing.java
import processing.core.*;
public class HelloProcessing extends PApplet {
	public void setup()
	{
		size(400, 400);
		background(0, 0, 0);
		smooth();
 		strokeWeight(5);
	}
	public void draw()
 	{
		noStroke();
		fill(0,5);
		rect(0,0,width,height);
		stroke(random(100,255),random(100,255),random(100,255));
		if (mousePressed) {
			line(mouseX,mouseY,pmouseX,pmouseY);
			Circle circle = new Circle(this);
			circle.draw();
		}
	}
}