困ったこと
setup
やdraw
メソッドが存在するメインクラスでは Processing の機能が適切に動作しますが,メインクラス以外のクラスでは PApplet による Processing の機能が適切に動作しませんでした.
【失敗】試したこと
どうしようもないため,とりあえずメインクラスと同様に PApplet を継承すれば動作するだろうと期待し,
public class ClassSub extends PApplet
{
...
}
と記述しましたが,rect
やimage
といったメソッドは使用できませんでした.
【成功】試したこと
結果としてメインクラスからのインスタンス生成時に PApplet 型の変数を対象のクラスに渡すことで解決しました.
private PApplet root;
public class ClassSub
{
ClassSub(PApplet root, ...)
{
this.root = root;
...
}
}
public class ClassMain
{
ClassSub subClass = new ClassSub(this, ...);
}
また,Processing のメソッドを呼び出すときは
root.image(imagePath, x, y);
root.rect(x, y, width, height);
のように,先頭にPApplet型の変数からの静的呼び出しで使えます.
補足
ちなみに Processing エディタにおいて,クラス管理のために複数のタブにクラスを分けて記述しますが,内部的にはすべてインナークラスとしてコンパイルされているようです.(下記)
class ClassMain
{
setup() {...}
draw() {...}
class ClassSub()
{
...
}
}
だから,Processing では複数のタブに分けてクラス管理をしても Processing の機能が使えるんですね...
(すべてメインクラスにぶち込んだら動くに決まってる!笑)
そのため,初めは Eclipse も Processing と同様に複数のタブにクラスを記述しても動作するだろうと思っていました...(数時間ロス)