ラベル ゲームパッド の投稿を表示しています。 すべての投稿を表示
ラベル ゲームパッド の投稿を表示しています。 すべての投稿を表示

2021年1月8日金曜日

中華ゲームパッド購入

普段、ゲームで遊ぶのはもっぱらWindowsマシンで、XInputに対応したゲームパッドを世界のAmazonから購入して使っています。ゲームパッドをJavaScriptで扱うためのライブラリを作っている関係で、DInputやXInputのゲームパッドをいくつか持っています。PS2のゲームパッドをUSBに変換して接続するアダプターもあります。

XBOX360ゲームパッド

その中でもやはり使いやすいのは、XBOX純正のコントローラーでした。以前はXBOX360のゲームパッドをWindowsに接続しゲームに使っていましたが、最近はXBOX ONEのXInput対応Bluetoothゲームパッドを使っていました。XBOX360用はドライバーをインストールしないと使えませんでしたが、XInput対応ゲームパッドはそのまま使えるので、かなり楽です。

XBOX ONEゲームパッド

しかし、このXBOX ONEゲームパッドの調子が悪くなってきました。電源を入れてもすぐに電源が落ちてしまったり、ゲーム中にBluetooth接続が切れてしまうようになりました。最近やっている「マインクラフトダンジョンズ」はハクスラなので、途中で使えなくなると致命的です。また、Nintendo Switchがあるのですが、標準で付いてくるコントローラーがお世辞にも使いやすいとは言えないので、対応ゲームパッドが欲しいなと思っていたのですが、純正はすぐに壊れると聞いていたので純正以外でいいのがないかと探していたところでした。

OPOLARゲームパッド(1)

「XInputとSwitch両対応で、無線USB接続のゲームパッド」で探していいたら見つけました。「OPOLAR」という聞いたことのないメーカー(多分中華)のゲームパッドが見つかりました。お値段は4,000円という、中華パッドにしてはちょっとお高めな感じです。これをポチってみました。

OPOLARゲームパッド(2)

電源を入れると結構派手に光ります。XInputで接続されると中央下の縦に4つあるLEDの、一番上と一番下(1番目と4番目)が光ります。初めて接続した時に、これが全然接続出来なくて「初期不良化?」と悩んだのですが、何度かやっていたら繋がりました(ゲームでも使えました)。


光りっぱなしのLED
しかし、ひとつ困ったことがあり、無線レシーバーのLED(説明書には「赤いLED」と書いてあるが実際は青)が、パソコンのUSB端子に挿している間はずーっと光ってしまっていることです。他にも中華なゲームパッドを持っているんですが、それらはパソコンの電源を落としている時は光らないですが、こいつはずーっと光ってしまっています[※1]。


ゲームパッド裏の謎スイッチ
そして、このゲームパッドには裏に謎のスイッチがあります。Nintendo Switch(なんか紛らわしい…)では設定で機能を割り当てられるらしいです(ちなみにSwitchではまだ使ったことないです)。Windowsでもなにかしらのボタンが割り当てられているみたいです。





とりあえず、しばらく使ってみることにします。あ、ひとつ書き忘れていましたが、充電コネクタはUSB-Cです。あと結構軽いです。

※1 2021.1.10追記:「光りっぱなしのLED」は私の使っているパソコンの仕様で、特定のUSBポートだけが常に電源供給されているのが原因でした。

2020年1月3日金曜日

ゲームパッドライブラリ

ちょっと前から「enforceGamePad」というJavaScriptで使うゲームパッドライブラリを作っている。市販のUSBゲームパッドが、ブラウザ毎、コントローラー毎にバラバラな値を返すため、JavaScriptゲームで使いづらいのをなんとかするために、ゲームパッドの「VendorID」と「ProductID」を読み取り、同じ位置のキーを同じ値を返すようにするというもの。



github.com



作り始めたのはいいが、同じ値を返すゲームパッドは、OEMと思われるものだけ。メーカーが同じでもゲームパッドが違えば全然違う値を返してくる。なので、個人ですべてのゲームパッドを買って定義ファイルを作るのは無理なので、定義部分をプラグインっぽくして拡張出来るように出来ないか模索中。



2014年7月18日金曜日

iPhone/Androidスマホをゲームパッドにするぞ計画

家電量販店などに行くと、スマホタブレット用のゲームをプレイするための、Bluetoothコントローラーが売っています。


こんな感じ(Google画像検索)。


f:id:digitarhythm:20140718175542p:plain


 


しかし、ゲームがやりたい時に必ずコントローラーが近くにあるか?というと、ほとんどの場合は無いと思うんですよ。


私は普段、iPadはこういう状態で持ち歩いています。


f:id:digitarhythm:20140718185702j:plain


 


当然、ゲーム用のコントローラーなど持ち歩いていません。


そして、この状態だとiPadの画面を操作するタイプのアクションゲームも出来ません。


 しかし、私達は普段コントローラーに似たサイズのデバイスを持ち歩いているではないか、ということに気付いたわけです。


そうです、こういうやつです。


f:id:digitarhythm:20140718190221j:plain


 


これならば、ちょっとゲームがやりたくなった時にパっとスマホを取り出して、iPadのゲームをやって、終わったらスマホは充電するなり、ポケットに入れるなりすればコントローラーを持ち歩く必要ありません。


 


で、ゲームのBluetoothコントーラーとして使えるアプリを作ればいいジャマイカと思いますが、そうは簡単にはいかないのです。


ゲームのコントローラーには通常、方向指示ボタンがついています。


どこの誰が考えたかわかりませんが、これが実に良く出来ていて、私達はこれに完膚無きまでに、慣れさせられています。


そこで、スマホの画面に十字の絵を描き、それをコントローラーのごとく操作させようとすると・・・・これが上手くいかないんですねぇ。


なぜなら指先にまったくボタンを押している感触が無いので、指がどんどん十字の絵から離れていってしまうんですね。


そこで次に、「最初にタッチした場所を中心として上下左右を判断する」という方法を取ったアプリが出てきました。


これはまぁ最初の、なんにも考えていないコントローラーよりいくらかはマシでした。


一旦指を離してしまえば次のタッチでリセットされるのですから。


しかし、これもゲームを続けていくとイライラさせられることになります。


なぜなら、位置をリセットするためには指を一旦離さないといけないからです。


使いやすくするために導入した「一旦指を離す」という操作が、ゲームを続けているとイライラポイントに変わってしまうんですね。


そして、指を離せない場面というのも存在します。


アクションゲームで多いと思うのですが、動き回りながら敵を倒していくタイプのゲームだと指を離している暇が無いのです。


例えばこんなゲーム*1です。


f:id:digitarhythm:20140718182229j:plain


そうすると一番最初のなにも考えてない十字の絵と同じ現象が出てしまうのです(指がどんどん十字から離れていってしまう)。


このアンチノミーを解消するにはどうすればいいのか?


いつかAppleがこれを解決するベストソリューションを提供してくれると信じて待っていたのですが、全く出てくる気配すらありません。


それどころか、WebのアップルストアBluetoothゲームコントローラーを売ってる始末です。


では、どうすればいいか?と考えてみました。


まず、「十字の位置をリセットするために指を離す」を除外します。


そもそもゲームをやっている時に指を離さなければならないなどと言うことは、思考の邪魔以外のなにものでもありませんし、上記の理由により離すことが出来ない場面が往々にして訪れます。


しかし指先で十字を認識出来ない以上、指はどんどん画面上を移動していくので、どこかで位置をリセットしなければいけません。


 


そこで、「二回目に閾値を越えた量の位置移動があったらそこを中心点にする」という方法を考えてみました。


f:id:digitarhythm:20140718191003p:plain


上記の図で説明すると、まず最初にタップした位置を中心点として指の方向を取得します。


図の左で言うと「上方向」の処理を行います。


そしてそのままタップし続けるとずーっと「上方向」の処理をし続けますが、指の動きがある閾値を越えたところで、その時の指の位置を中心として十字コントローラーをリセットします。


例えば、画面をタップし指を上へ動かすと自キャラは上へ歩いて行きますが、指を動かすとリセットされるので自キャラは止まります。


しかしそれだと、方向を変えるためには一旦止めてから再び方向を指示するという形になり、タップし直してリセットとあまり変わりません。


 


そこで、方向を指示した後の指の動かす方向によって処理を分ければいいのではないかという考えに辿り着きました。


f:id:digitarhythm:20140718195311p:plain


おおまかに図にすると上図のようになります。


最初にタップした位置から上へ指を動かすと上方向への指示になります。


そこから閾値を越えて右へ指を動かした場合はそこを中心としてリセットし、右方向への指示とします。


左の場合はリセットして左方向への指示です。


下の場合は2段階になり、下に動かすとリセットされそこを十字の中心にします。


そこからさらに下に動かした場合は下方向への指示とするという感じです。


 


と、構想は出来ているので、あとはアプリを作るだけですね(笑)


 


QMK開発環境構築メモ

## Ubuntuコンテナイメージ取得 ```bash docker pull ubuntu:24.04 ``` --- ## コンテナ作成 ```bash docker run -it --name qmk_dev -v [マウント元ディレクトリ]:[マウント先ディレクトリ]...