【備忘録】Processingでgame control plusを使う 2
前回の記事に続き、
game control plusでゲームパッドを使えるようにしていきます。
かなり広く対応できるようになったため、
このプログラムを公開します。
プログラム本文
import org.gamecontrolplus.*;
ControlIO control;
ControlDevice device;
ControlSlider[] sliders;
ControlButton[] button;
int[] val_sliders,val_buttons; //応用できるように値を配列で格納
void setup() {
Controller_Setup();
frameRate(10);
}
void draw() {
background(0);
textUpDate();
}
void textUpDate(){
for (int i = 0; i < device.getNumberOfSliders(); ++i) {
val_sliders[i] = int((sliders[i].getValue()+1)/2*1023); //スライダの値を0~1023で表せるように調節してprint
println(i + ": " + val_sliders[i]);
}
for (int i = 0; i < device.getNumberOfButtons(); ++i) {
if (button[i].pressed()) {
print((i+1) + "is Pressed"); //ボタンの状態をpressed,releasedと0,1で使用できるようにしている
val_buttons[i] = 1;
println(" " + val_buttons[i]);
}else {
print((i+1) + "is Released");
val_buttons[i] = 0;
println(" " + val_buttons[i]);
}
}
}
void Controller_Setup(){
control = ControlIO.getInstance(this);
println("使えるデバイス: " + control.getDevices());
device = control.getDevice("DualSense Wireless Controller"); //ここに表示された使いたいコントローラの名前を入れる
val_sliders = new int[device.getNumberOfSliders()]; //コントローラのスライド数を取得し、値を入れるための配列を決める
val_buttons = new int[device.getNumberOfButtons()]; //同様にボタンでも行う
sliders = new ControlSlider[device.getNumberOfSliders()]; //こちらはライブラリがスライダを指定できるための配列
button = new ControlButton[device.getNumberOfButtons()]; //同様にボタンでも行う
for (int i = 0; i < device.getNumberOfSliders(); ++i) {
sliders[i] = device.getSlider(i); //スライダの名前とスライダの指定用の配列の紐づけ
}
for (int i = 0; i < device.getNumberOfButtons(); ++i) {
button[i] = device.getButton(i); //同様にボタンでも行う
}
}
解説
まず、game control plusが入っていることが前提です。
まだできてない方は前回の記事を参考にしてください。
今回、参考にしたコードは以下の二つのブログから拝借しました。
今回書いたプログラムでは、スライダの値が0~1023、
各ボタンのオンオフを0と1で配列に入れました。
私はこれからこれをarduinoなどと連携したいと
考えているためです。
序文
import org.gamecontrolplus.*;
ControlIO control;
ControlDevice device;
ControlSlider[] sliders;
ControlButton[] button;
int[] val_sliders,val_buttons; //応用できるように値を配列で格納
ここはあまりいじっていません。
ライブラリをインポートして、関数の名前を指定し、
ライブラリが使用するための
スライダとボタンの配列を用意します。
int型で値を入れるための配列を用意しました。
setup
void setup() {
Controller_Setup();
frameRate(10);
}
void Controller_Setup(){
control = ControlIO.getInstance(this);
println("使えるデバイス: " + control.getDevices());
device = control.getDevice("DualSense Wireless Controller"); //ここに表示された使いたいコントローラの名前を入れる
val_sliders = new int[device.getNumberOfSliders()]; //コントローラのスライダ数を取得し、値を入れるための配列を決める
val_buttons = new int[device.getNumberOfButtons()]; //同様にボタンでも行う
sliders = new ControlSlider[device.getNumberOfSliders()]; //こちらはライブラリがスライドを指定できるための配列
button = new ControlButton[device.getNumberOfButtons()]; //同様にボタンでも行う
for (int i = 0; i < device.getNumberOfSliders(); ++i) {
sliders[i] = device.getSlider(i); //スライダの名前とスライダの指定用の配列の紐づけ
}
for (int i = 0; i < device.getNumberOfButtons(); ++i) {
button[i] = device.getButton(i); //同様にボタンでも行う
}
}
setupの部分で少し変更を加えました。
最初にプログラムを動かした際、おそらく動かないと思います。
ターミナルにパソコンに接続されているデバイス名が出てきます。
そのなかから、自分が使用したいデバイスの名前を
今回の場合だと"DualSense Wireless Controller"と入っているところにいれます。
そしたら値の取得が自動で行われます。
各スライダ、ボタンの値を入れる配列と指定する配列を
コントローラのスライダ、ボタン数に合わせて設定して、
最後にそれらを、for文で関連付けを行ってsetupは完了です。
draw
void draw() {
background(0);
textUpDate();
}
void textUpDate(){
for (int i = 0; i < device.getNumberOfSliders(); ++i) {
val_sliders[i] = int((sliders[i].getValue()+1)/2*1023); //スライドの値を0~1023で表せるように調節してprint
println(i + ": " + val_sliders[i]);
}
for (int i = 0; i < device.getNumberOfButtons(); ++i) {
if (button[i].pressed()) {
print((i+1) + "is Pressed"); //ボタンの状態をpressed,releasedと0,1で使用できるようにしている
val_buttons[i] = 1;
println(" " + val_buttons[i]);
}else {
print((i+1) + "is Released");
val_buttons[i] = 0;
println(" " + val_buttons[i]);
}
}
}
最後にdraw部分です。
drawではターミナルに値を表示させるようにしています。
応用してもらえば簡単にtext等で使用できると思います。
sliders[指定する番号].getValue()で-1~1のfloat型で取得できるので、
これをint型に変更しつつ、値の処理を行っています。
ボタンの処理に関しては、オンオフで条件を変化させて文章によるprintとval_buttonsによる数字的表記を重ねています。
まとめ
Processingでゲームパッドを簡単に使用できるコードができました。
これを応用してArduinoなどの開発につなげていきたいです。
この記事が気に入ったらサポートをしてみませんか?