digital for humanlife.

powered by PROMINENCE.tv

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段階になり、下に動かすとリセットされそこを十字の中心にします。

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

 

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