ニコニコチャンネルメニュー

ブロマガ - ニコニコチャンネル

なんか書いたり紹介したりレビューしたり

IIDX プレミアムコントローラ(専コン)をLR2で動かす

2016/08/07 00:51 投稿

  • タグ:
  • IIDX
  • LR2
  • 専コン
というわけで、買いました。

そして、案の定LR2ではそのまま動かないという。
でもすでにアプリが公開されているぞ!!!!
やったね!


・・・


でも結局何が問題やねん!!!!!

というわけで、少し解説とアプリを作ってみるよ。
(上記の通り、アプリはすでにあるけれど作ってみたかったんだよねー)




1. 問題なのは皿の入力方式だった


そもそも、なぜLR2ではそのまま使用できないのでしょうか?
それはコントローラの皿入力が他のコントローラと違うからでした。

・一般的な他の専コン
 皿入力は「ボタン」で扱われます。
 なので「ON」と「OFF」の状態が明確です。
 


・INFコン
 皿入力は「アナログスティックの倒し具合」で表現されます。
 なので「ほぼ常にON」状態となります。

 

つまり、LR2でそのまま利用すると皿を回し続けている状態と同じになります。

これじゃ使えませんねぇ…



2. じゃあどうするか?


答えは簡単です。
皿の入力を受け取ってキー入力に変換してあげるアプリを噛ませば良いのです。
冒頭で紹介したアプリがそうですね。
そうすると、下図のような形になります。



この時注意するのは、本来の皿の入力はLR2側で無視する必要があります。
キーコンフィグで皿に該当する入力の設定を消去しましょう。
1P(2P) LEFT とか 1P(2P) RIGHTがそうなのかな。



3. んじゃ、アプリつくろっか


というわけで、上記構成を実現するアプリを作成します。



・・

・・・

・・・・

とりあえず、C#コンソールアプリケーションでできました。
コードはこちら
超適当コードなのは仕方ないね。

ポイントは以下。

・DirectInputを用いてコントローラを取得する
 監視対象のコントローラの情報を取得するためにゴニョゴニョします。
 (15-45行)

・無限ループとカウンタを用いてタイマーを使わずにコントローラ状態をチェックしている
 タイマーを使わないことによって遅延を極力おさえています。
 体感できる遅延は出ないはずです。
 (56-156行)

・皿入力の折り返しに注意
 皿入力はは前述のとおり、「アナログスティックの倒し具合」で表現されます。
 この倒し具合は「0-65535」の値で表現されています。
 なのでこの数値が65535→0と移った場合は右回転、0→65535
 と移った場合は左回転となるため、その処理が必要です。
 (65-101行)

・一定期間皿入力がなかった(皿位置が変わらなかった)場合は停止と判断する
 コントローラの情報の取得間隔は非常に短いため、単純に「前回値と変化なし」
 とした場合は皿を回し続けていても入力が連続して行われてしまうため、
 停止の検知には猶予時間を設ける必要があります。
 (135-143行)



・・・たった160行程度でできるもんですねぇ
興味があれば、ぜひソースコード落としてみて実際にやってみてください。

コメント

コメントはまだありません
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事