Game Pad のテスト
研究室のゲームパッドをPCに突き刺して,色々ボタンを押してみよう!
7 | | | | | | | | | | 8 |
5 | | | | | | | | | | 6 |
| ↑ | | | 9 | | | | 10 | | | 2 | |
← | | → | | | auto | | clear | | | 1 | | 4 |
| ↓ | | | | | | | | | | 3 | |
|
| | | ↑ | | | | | | ↑ | | | |
| | ← | | → | | | | ← | | → | | |
| | | ↓ | | | | | | ↓ | | | |
JC-U3312S (研究室のゲームパッド) について
アナログとデジタルの2モードがある.
どちらのモードなのかは,パッド上部のLEDの色で分かる.
ページを表示してからなんかボタンを押さないと取得できない(セキュリティ上の制限)ので,最初に押したボタンは取得できない.
また,ゲームパッドのボタンを押したというイベントは存在しないので, setInterval で適当な間隔 (0.1sとか)でずっと押したかどうかのチェックをする必要がある.
アナログモード (赤色)
Linuxなら全てのキーが問題なく取得可能.
Windowsの場合は,ハットスイッチ問題(ググれ)によって十字キーが死亡する(ジョイスティックは使える).
専用ソフトを入れて設定を変更したら十字キーも使えるだろうけど,それをユーザに必須にするのはどうなの…?
ジョイスティックは左右共に傾きっぷりも取得できる ("アナログ" モードだから当然だけど).
autoとclearとModeボタンは認識できない.
ボタン : 押されてるかどうかの二値 (true / false)
ジョイスティック : 左(-1)〜右(1)の軸と,上(-1)〜下(1)の軸がある.
十字キー(Linux) : 左(-1)または右(1)または中心(0)の軸と,上(-1)または下(1)または中心(0)の軸がある(3値しかとらない).
デジタルモード (緑色)
WindowsもLinuxも同じ動作.
左のジョイスティックと十字キーの区別が付けられなくなる(十字キーが左ジョイスティックと同等になるのであって,逆ではない).
ボタンはアナログモードと同じ.
ジョイスティックは左右共に 1, 0, -1 の3値(Linuxのアナログモードの十字キーと同じ)しかとらない.
autoとclearとModeボタンは認識できない.
結局どうすりゃいいの?
アナログモード(赤): Linuxのみの場合,またはジョイスティックの傾けっぷりが必要な場合.
デジタルモード(緑): WindowsとLinuxで同じ動きにしたい場合,またはジョイスティックの傾けっぷりが不要な場合.
視力検査にこれを使う場合,方向キー(十字キーとアナログスティック)については「何秒以上同じ入力なら受け付ける(デジタル)」あるいは「何秒以上値が幾ら以上(以下)なら受け付ける(アナログ)」という処理にする必要がある.
なぜなら,上に書いたように 0.1s などの間隔で押したかどうかのチェックをずっとしているので,例えば左上だとしても,厳密に同じタイミングで押せなければ「左」→「左上」や「上」→「左上」の連続入力のように扱われるから.
アナログの場合はさらに傾けっぷりによって値が違うので,例えば上下軸が 0.5 以上なら下,0.5以下なら上のように扱う必要がある(中心は理論上は0だけど,ちょっと誤差があったりすると0.01とかになっちゃう).
受け付けるまでの時間は,入力チェックの間隔の整数倍にすべき (というか,入力チェックで何回同じなら,にすべき).
ぶっちゃけ視力検査みたいな用途ならアナログモードで使用するメリットは全く無い.
ドライバは?
Ubuntuなら
sudo apt-get install joystick jstest-gtk
でOK.
Windowsはたぶんドライバ要らないはず.