#はじめに
##概要
Processingでちゃんとクラス分けをして気持ちよく開発していたら、外部のJavaクラスファイルからprintln()
などの標準的な関数(厳密にはprocessing.core.PApplet
以下で定義されているメソッド)が使えへんやん!って思ったので、少し調べて見ました。
##環境
今の自分の環境です。他の環境でも基本的には問題ないと思います。
- Processing
- Processing3.3.7
- OS
- macOS HighSierra
##Processingについて
Processingとは、ビジュアルアートなどにおいて、簡単にコーディングができたり学べだりする言語/環境です。2001年から開発が続いており、ビジュアルアートにおけるソフトウェアリテラシや、テクノロジにおけるアートリテラシの向上に貢献しています。現在ではたくさんの学生、アーティスト、デザイナー、研究者、一般人(hobbyists)がProcessingを用いて学んだりプロトタイピングをしたりしています。(公式サイトの説明文を適当に意訳)
つまりアートとかプロトタイピングがさっとできてとても楽しく素晴らしい環境ということです。
#結論
現状、自分の知識の範囲では、関数を使いたい外部Javaクラスファイルにprocessing.core.PApplet
をインポートして、クラス内部でPAppletのインスタンス(ベースクラス/エントリーポイントのクラスのインスタンス)を保有し、そのインスタンスから関数をコールすると良いと思っています。つまり、Test.pde
でプロジェクトを作って、Human.java
というクラスファイルを同じディレクトリに作成したとすると、
void setup() {
Human Oka = new Human();
}
void draw() { }
public class Human {
public Human() {
println("ware umaretari"); //これだとprintlnが定義されていないと怒られる
}
}
を、
void setup() {
Human Oka = new Human(this);
}
void draw() { }
import processing.core.PApplet;
public class Human {
PApplet parent;
public Human(PApplet p) {
this.parent = p;
this.parent.println("ware umaretari");
}
}
とすると良いということですね!
#まとめ
今後もコアな使い方(?)ができるよう頑張ります。もう少しクレバーなやり方があれば教えていただけると幸いです。ちなみに、もともとベースクラス(今回の例ではTestクラス)からメソッドを呼び出すことができるのはわかっていたのですが、もっと一般的なやり方ができるのでは?というのはControlP5のコンストラクタで自分のインスタンスを渡すことになっているということから気づきました。