Scratchにはたくさんのゲームが公開されていますが、操作は主にキーボード。これをゲームのコントローラーで遊べたらいいのになぁ・・・という事で使えないか調べてみました
Joy-Conはあっさり接続できる
ニンテンドースイッチのコントローラーJoy-ConはBluetooth接続で、WindowsマシンやMacに簡単に接続できます
コントローラーのこのボタンを長押しすればペアリングモードになるので・・・
Macの場合はBluetooth接続の環境設定に「Joy-Con(R)」もしくは「Joy-Con(L)」が表示されます。ここで「接続」ボタンを押せば接続完了です
が、ジョイスティックとして認識されるので、対応しているゲームしか使えないみたいです。当然Scratchでは使えません
キーマッピングソフトが必要
なので、ジョイスティックからの入力を、キーボード入力に変換するアプリが必要になります
調べてみると、WindowsだとJoytoKeyというアプリが有名のようです。無料で使えるけれど、気に入ったら700円支払うというシェアウェアです
Macにもキーマッピングのアプリはありましたが、有料のようですね。有料だと子どもが簡単に利用しにくいかな・・・というわけで簡単なアプリを作ってみました
MacSwitch
作成したアプリは「MacSwitch」。簡単なキーマッピングアプリです。イラストは右Joy-Conですが左Joy-Conも使えます
初期値では、スティックの上下左右をキーボードの上下左右キーに、それ以外のキーをスペースキーに割り振っています。これは後から自由に変更できます。だだし、複数キーやマウスの割り振りには対応していません
スティックの斜めキーにも個別にキーを割り振ることができるのですが、設定が複雑になってしまうので、右斜め上と右斜め下は右に、左斜め上と左斜め下は左に割り振っています。いろいろ試してみてこれが一番しっくりきました
あと、右Joy-Conと左Joy-Conのだいたい同じような位置にあるボタン(HOMEボタンとキャプチャーボタンなど)は同じキーとみなして実装しています
うまく動かないScratchプログラムもある
Scratchでのキー入力に対応したプログラムは2つの実装方法があります
Aのキーイベントを使う方法と、Bのループ内でキーの状態をチェックする方法です。どちらもスペースキーを押している間ネコを10歩動かすプログラムです
Aはスペースキーが押された時に「10歩動かす」が1回だけ実行されます。これに対してBはスペースキーが押されていれば何度も「10歩動かす」が実行されます
この理屈だと、スペースキーが押された状態でAはネコが10歩だけ歩くはずですが、キーを押し続けている間ずっと歩き続けます。これはパソコンのキーボードにキーリピートの機能が付いているからです。同じキーを押し続ければ「ああああああ・・・・・」のように連続して文字が入力されるのがキーリピート機能です
一般的なゲームコントローラーにはキーリピート(連射)の機能はありません。高橋名人が16回ボタンを叩かないといけないのはキーリピート機能がないため。キーリピート機能がないのに、十字キーでマリオが歩き続けるのは、Bの方法で実装しているから。なので、ゲームプログラム的にはBのプログラムが正しいと言えます
今回作成したアプリはキーリピートの実装をしていないので、Aのプログラムはキーボードでの操作と同じようには動きません
Scratchのゲームいろいろ
これらのゲームを試してみましたが、うまく動作しました