Processingでゲームパッドを使おう (その3)
関連記事。
- Processingでゲームパッドを使おう (その1) - 雑念日記
- Processingでゲームパッドを使おう (その2) - 雑念日記
- Processingでゲームパッドを使おう (その4) - 雑念日記
GameControlPlusを使ってゲームパッドを扱うにあたって、ボタンにイベントハンドラを追加することができます。
以下のようにすることで、draw()メソッド内に複雑な処理を書かなくて済むようになる上に、ボタンを押した(離した)とき1回だけの処理を簡単に記述することができます。
サンプルコード:
import org.gamecontrolplus.*; ControlIO control; ControlDevice device; ControlButton button; void setup() { control = ControlIO.getInstance(this); device = control.getMatchedDevice("gamepad_config"); button = device.getButton("B_0"); button.plug(this, "pressButton", ControlIO.ON_PRESS); button.plug(this, "releaseButton", ControlIO.ON_RELEASE); } // ボタンが押されたタイミングでメッセージを表示 void pressButton() { println("PRESSED!"); } // 押されたボタンを離すタイミングでメッセージを表示 void releaseButton() { println("RELEASED!"); } void draw() { // 入力待ち }
イベントハンドラの追加を行うplug()メソッドの詳細は以下です。
public void plug(Object i_object, String i_methodName, int i_eventType)
引数 | 説明 |
---|---|
i_object | 第3引数で指定するイベントが発生したときに、ここで指定したオブジェクトをレシーバとして、第2引数で指定するメソッドを実行する。 |
i_methodName | イベント発生時に実行するメソッドの名前を指定。 |
i_eventType | トリガーとなるイベントを指定。 |
トリガーとなるイベントは以下の3つの中から選べます。
定数名 | 説明 |
---|---|
ON_PRESS | ボタン押下時に1度だけ発火するイベント。 |
ON_RELEASE | 押下状態のボタンを離したときに1度だけ発火するイベント。 |
WHILE_PRESS | ボタン押下中に発火し続けるイベント。 |
以下のように、1つのイベントに対して複数のイベントハンドラを追加することも可能です。
void setup() { control = ControlIO.getInstance(this); device = control.getMatchedDevice("gamepad_config"); button = device.getButton("B_0"); button.plug(this, "pressButton", ControlIO.ON_PRESS); button.plug(this, "pressButton2", ControlIO.ON_PRESS); } void pressButton() { println("PRESSED!"); } void pressButton2() { println("PRESSED 2 !"); }
なお、plug()メソッドが使えるのはボタン(ControlButton)とハット(ControlHat)のみで、スライダー(ControlSlider)にはイベントハンドラを登録することはできない模様。