ZawaWorks’s diary

プログラミング技術メモ

Processing: 2番目の画面でクラスを使うときの注意

Processingは通常画面が一つしか作成されませんが,PAppletクラスを継承するクラスを作れば画面を複数作成することができます. f:id:ZawaWorks:20191207161923j:plain

問題

新しくTestクラスを作りました.これは画面の背景を黒くするクラスです.

このクラスをSecondWindowdraw()に書きましたが,背景が黒くなりません.

f:id:ZawaWorks:20191207162005j:plain

解決方法

これは以下のようにSecondWindow内にPApplet型の変数を用意して,applet.background(0)とすれば2番目の画面の背景色を変更することができました. f:id:ZawaWorks:20191207162716j:plain

今回のコードは,すべてこちらにあります. 2番目の画面内でクラスを使うときの注意 · GitHub

解説

f:id:ZawaWorks:20191207165911j:plain PAppletクラスは画面を作成し,setup()draw()background()を管理しているクラスです. Processingでは起動するとPAppletクラスが呼ばれて画面を作成し,その中身はsize()background()などで変更されます. SecondWindowクラスはそれを継承して,新しい画面を作成し元のPAppletクラスと同じ機能(setup()background()など)を備えています.

background()ellipse()などの命令を自分の作ったクラス(今回はTestクラス)で呼ぶと,それは1番目のPAppletの命令を呼んでしまうので,2番目のPAppletSecondWindow)の中身には何も変化が起きません.

これは,クラスの内で呼ばれるbackground()などの命令が,どのPAppletの命令なのかを指定することで解決することができるのです.

ちなみに

クラス内でmouseXmouseYとしても,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);
  }
}

参考文献

3846masa.hatenablog.jp