18 ControlP5 画像button の使い方
ControlPの buttonコントロールの背景に画像を使用したボタンの作成方法を整理しました。
1. 基本スケッチ
Processingに新規スケッチを作成し、次のコードを追加します。
画面には二つのボタンが表示され、上のボタンをクリックすると、右の四角内の色が明るく、下のボタンをクリックすると、暗く変化します。
ただし、次のステップ「2. 画像の登録」を実施し、スケッチに画像を取り込まないと完全なスケッチとして実施することはできません。
import controlP5.*; ControlP5 cp5; int myColor = 0; void setup() { size(200,150); cp5 = new ControlP5(this); PImage[] imgUp = {loadImage("buttonUp_a.png"), loadImage("buttonUp_b.png"), loadImage("buttonUp_c.png")}; PImage[] imgDn = {loadImage("buttonDown_a.png"), loadImage("buttonDown_b.png"), loadImage("buttonDown_c.png")}; cp5.addButton("btnUp") .setValue(255) .setPosition(30,20) .setImages(imgUp) .updateSize() ; cp5.addButton("btnDown") .setValue(128) .setPosition(30,80) .setImages(imgDn) .updateSize() ; } void draw() { background(50); fill(myColor); rect(120,20,50,50); } public void btnUp(int theValue) { println("an event from btnUp: "+theValue); myColor = theValue; } public void btnDown(int theValue) { println("an event from btnDown: "+theValue); myColor = theValue; }
ボタンの背景となる画像は3枚で1組で、
- 通常時の画像、
- マウスと重なった時の画像、
- マウスでクリックした時の画像
になります。
imgUp imgDn
これらを
- PImage配列に読み込み
- setImages(imgUp)でボタンに組み込み
- updateSize()で更新します。
通常時 マウスと重なる クリック
ボタンをマウスでクリックすると、void btnUp( )関数,または void btnDown( )関数にリンクされるので、関数内でボタンに登録されている Value値を取り出し、右四角の塗り潰し色 myColorとします。
draw関数内で、四角を描きその内側をmyColor 変数で、灰色(127)か 白(255)で塗り潰します。
2. 画像を登録する
このスケッチでは、6枚の画像が必要です。これらは、スケッチのフォルダーに「data」フォルダを作成してその中に保存します。画像自体は、GIMPなどの作画ソフトで作り、以下のいずれかの方法で、スケッチに登録します。
- Processing メニュー > スケッチ > ファイルを追加... ファイルを選択するダイアログが現れるので、登録する画像ファイルを選んで[開く]をクリックする。「data」フォルダが自動作成されその中に画像ファイルがコピーされる。
- Processingのエディター領域に、登録する画像ファイルをドラッグ&ドロップする。この場合も「data」フォルダが自動作成されその中に画像ファイルがコピーされる。
- 自分でスケッチのフォルダーに「data」フォルダを作成し、その中に画像を保存する。
画像の登録を終えたらスケッチを実行してください。上向きの矢印ボタンをクリックすると右の四角が明るく、下向きの矢印ボタンをクリックすると右の四角が暗くなります。
3. controlEvent( ) 関数で処理を実行する
サンプルのスケッチでは、ボタンごとの関数でボタンクリックの処理を行いました。controlEvent( ) 関数を利用することで、複数コントロールの処理を一つの関数で行うことができます。
import controlP5.*; ControlP5 cp5; int myColor = 0; void setup() { size(200,150); cp5 = new ControlP5(this); PImage[] imgUp = {loadImage("buttonUp_a.png"), loadImage("buttonUp_b.png"), loadImage("buttonUp_c.png")}; PImage[] imgDn = {loadImage("buttonDown_a.png"), loadImage("buttonDown_b.png"), loadImage("buttonDown_c.png")}; cp5.addButton("btnUp") .setValue(255) .setPosition(30,20) .setImages(imgUp) .updateSize() ; cp5.addButton("btnDown") .setValue(128) .setPosition(30,80) .setImages(imgDn) .updateSize() ; } void draw() { background(50); fill(myColor); rect(120,20,50,50); } public void controlEvent(ControlEvent theEvent) { println(theEvent.getController().getName()); myColor = (int)theEvent.getController().getValue(); }
次回は、スライダーを使いシリアルポートを選択する実用的なスケッチを掲載します。