画面タッチ処理のいろいろ

スマホ用のゲームを作るなら画面をタッチしたときにどういう処理を行うかということをプログラムしていくことになります。しかしそのタッチでも使い方によってはちょっと考えないといけなかったりします。

今回は画面タッチについて気づいたことを書いてみます。

基本的な使い方

基本的にはシーンやキャラクターなどのスプライトにイベントリスナを設定して使います。

タッチはシーンやスプライトの範囲内であれば反応してくれます。通常はこれで問題なく開発できます。

画像無しのスプライトを使う

例えばタッチの場所でキャラクターを左右に動かしたいとします。ボタンを作ってもいいですが、できれば画面全体を使ってどうにかしたい。

と思ったときに試してみたのが画像を設定しないスプライト。画像は設定していないので当然画面には何も表示されていないけど設定した大きさと場所にスプライトは存在しているようです。

左右半分ずつに画像のないスプライトを設定してイベントリスナを設定してやると左右それぞれで反応してくれます。

タッチに当たり判定をつけて処理する

例えばタッチで触ったものに何かしらの処理をさせたいとき、普通はスプライトにイベントリスナを設置して処理すると思うんですが、これだと画像が重なった時に上になっている方のイベントが処理されます。

例えばそれが画像が小さくてスプライト的にはそこにあるけど見た目は何もない部分なんてときに、その余白部分の下に別の画像があって、プレイヤー的にはそっち押したつもりなんて状態の時に正しく処理できない(説明が難しい)。

上の画像で言うと重なってる部分では上になってる方のイベントリスナが発火します。もしプレイヤーが下の方を押したつもりだったらおかしなことになってしまいます。

というか余白部分でも反応してしまうのでそれをどうにかしたい(最初からそう言えば分かりやすかったんだな(^^;))。

で、どうしたもんかな?と考えた結果、スプライトのイベントリスナでは処理をせず、タッチした場所とキャラとの当たり判定を取るようにしました。

通常のシューティングゲームなどと同様にキャラの当たり判定を設定し、画面にタッチするたびにその場所とキャラとの当たり判定をとればOKです。

で、このとき上になってるキャラから当たり判定を取っていけば重なっていても問題なく処理できます。

まとめ

スマホ用ゲームはタッチが操作の要なのでタッチの処理がゲームの出来を左右します。ゲームの内容に合わせてタッチ処理も変えられるように色々試してみる必要があるようです。

コメントを残す

メールアドレスが公開されることはありません。