2010年2月6日土曜日

Eclipse で Processing

自分用備忘録。開発環境はいつも使ってるのを使いたいよね。

Processing は Java そのもの。画像を簡単に扱えるようにしたライブラリ、ぐらいの認識のほうがいいのかも。
そうなると、外とのやりとりに Apache Software Foundation の成果を使いたくなるでしょうし、さらにがりがり書こうとすると、やれバージョン管理やら、やれパッケージングやら、やれ入力補完やら欲しくなってくる…。ということで、Eclipse、使います。
設定方法の公式ページはこちら。基本的にざっくり訳しただけというメモ書きです。(^^ゞ
- Processing in Eclipse \ Processing 1.0
 http://processing.org/learning/eclipse/

1. Eclipse を Download してインストール
http://www.eclipse.org/downloads/ から Eclipse IDE for Java Developers をダウンロードする。ダウンロードしたファイルは好きなところに解凍。

2. 新しいプロジェクトを作成
Welcome 画面閉じて、[Package Explorer]で右クリック、[New]-[Java Project]。プロジェクト名はとりあえず「TestProcessing」で。

3. Processing のライブラリをインポート
Processing インストールした時にできる lib フォルダから必要な jar ファイルをビルドパスに追加する。先ほど作成したプロジェクトを右クリック、[Build Path]-[Add External Archives...]。lib フォルダにある core.jar を選択する。
ちなみに core.jar 、GNU LGPL なんでその辺り気になる方はお気を付けを。

4. クラスの作成、コードの記述
サンプルコードを書いてみる。

import processing.core.PApplet;


public class MyProcessingSketch extends PApplet {

private static final long serialVersionUID = -1530381177827393671L;

@Override
public void draw() {
stroke(255);
if (mousePressed) {
line(mouseX, mouseY, pmouseX, pmouseY);
}
}

@Override
public void setup() {
size(200, 200);
background(0);
}

}


適当な解説とか。

  • processing.core.* パッケージに必要なクラスが色々入ってる。適宜 Import する(Ctrl+Shift+O!)。

  • processing.core.PApplet クラスを extends する。Processing の全ての機能が利用できるようになる。

  • setup(), draw() メソッドを Override する(Alt+Shift+S, v!)。



5. 実行
[Package Explorer]で作成したクラスを右クリック、[Run As]-[Java Applet]。
普通の Java アプリケーションとして実行したい場合は、以下の通り main メソッドを追加して、[Run As]-[Java Application]。

import processing.core.PApplet;


public class MyProcessingSketch extends PApplet {

private static final long serialVersionUID = 8801683180749406362L;

@Override
public void draw() {
stroke(255);
if (mousePressed) {
line(mouseX, mouseY, pmouseX, pmouseY);
}
}

@Override
public void setup() {
size(200, 200);
background(0);
}

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



複数のクラスを使う場合
このサンプルスケッチを Eclipse で作る場合、Processing のスケッチで使われてる Stripe クラスは実際はインナークラスとして定義されてる。
こんな感じで。

import processing.core.PApplet;

public class MyProcessingSketch2 extends PApplet {

private static final long serialVersionUID = 978193620686319475L;

// An array of stripes
Stripe[] stripes = new Stripe[50];

@Override
public void setup() {
size(200, 200);
// Initialize all "stripes"
for (int i = 0; i < stripes.length; i++) {
stripes[i] = new Stripe();
}
}

@Override
public void draw() {
background(100);
// Move and display all "stripes"
for (int i = 0; i < stripes.length; i++) {
stripes[i].move();
stripes[i].display();
}
}

class Stripe {
float x; // horizontal location of stripe
float speed; // speed of stripe
float w; // width of stripe
boolean mouse; // state of stripe (mouse is over or not?)

Stripe() {
x = 0; // All stripes start at 0
speed = random(1); // All stripes have a random positive speed
w = random(10, 30);
mouse = false;
}

// Draw stripe
void display() {
fill(255, 100);
noStroke();
rect(x, 0, w, height);
}

// Move stripe
void move() {
x += speed;
if (x > width + 20)
x = -20;
}
}
}



バージョン管理とかする場合、複数のファイルに分割して、手を入れる範囲を少なくしておきたいと思う。分割する場合は、親クラスを生成時に渡してあげるといい。こんな感じで。

MyProcessingSketch2.java

import processing.core.PApplet;

public class MyProcessingSketch2 extends PApplet {

private static final long serialVersionUID = -3546131844473457390L;

// An array of stripes
Stripe[] stripes = new Stripe[50];

@Override
public void setup() {
size(200, 200);
// Initialize all "stripes"
for (int i = 0; i < stripes.length; i++) {
stripes[i] = new Stripe(this);
}
}

@Override
public void draw() {
background(100);
// Move and display all "stripes"
for (int i = 0; i < stripes.length; i++) {
stripes[i].move();
stripes[i].display();
}
}
}



Stripe.java

import processing.core.PApplet;


public class Stripe {

PApplet parent;

float x; // horizontal location of stripe
float speed; // speed of stripe
float w; // width of stripe
boolean mouse; // state of stripe (mouse is over or not?)

Stripe(PApplet parent) {
this.parent = parent;
x = 0; // All stripes start at 0
speed = parent.random(1); // All stripes have a random positive speed
w = parent.random(10, 30);
mouse = false;
}

// Draw stripe
public void display() {
parent.fill(255, 100);
parent.noStroke();
parent.rect(x, 0, w, parent.height);
}

// Move stripe
public void move() {
x += speed;
if (x > parent.width + 20)
x = -20;
}
}



よし、次は Eclipse で Gainer するです。

0 件のコメント:

コメントを投稿