Processing: 2番目の画面でクラスを使うときの注意
Processingは通常画面が一つしか作成されませんが,PApplet
クラスを継承するクラスを作れば画面を複数作成することができます.
問題
新しくTest
クラスを作りました.これは画面の背景を黒くするクラスです.
このクラスをSecondWindow
のdraw()
に書きましたが,背景が黒くなりません.
解決方法
これは以下のようにSecondWindow
内にPApplet
型の変数を用意して,applet.background(0)
とすれば2番目の画面の背景色を変更することができました.
今回のコードは,すべてこちらにあります. 2番目の画面内でクラスを使うときの注意 · GitHub
解説
PApplet
クラスは画面を作成し,setup()
やdraw()
,background()
を管理しているクラスです.
Processingでは起動するとPApplet
クラスが呼ばれて画面を作成し,その中身はsize()
やbackground()
などで変更されます.
SecondWindow
クラスはそれを継承して,新しい画面を作成し元のPApplet
クラスと同じ機能(setup()
やbackground()
など)を備えています.
background()
やellipse()
などの命令を自分の作ったクラス(今回はTest
クラス)で呼ぶと,それは1番目のPApplet
の命令を呼んでしまうので,2番目のPApplet
(SecondWindow
)の中身には何も変化が起きません.
これは,クラスの内で呼ばれるbackground()
などの命令が,どのPApplet
の命令なのかを指定することで解決することができるのです.
ちなみに
クラス内でmouseX
やmouseY
としても,1番目の画面のマウス座標を取得してしまうので,これもapplet.mouseX
のように指定する必要があります.
class Test { PApplet applet; Test(PApplet _applet) { applet = _applet; } void display() { applet.background(0); applet.fill(255); applet.ellipse(applet.mouseX, applet.mouseY, 20, 20); } }