Scratchで、フリック・スワイプ操作を実現してみた。
2019-5-07
タブレットでも遊べるゲームをScratchで作るため、ゲームに使えるタッチ操作を作っています。今回は、ディスプレイを指ではらう「フリック」と「スワイプ」を実現します。
スマホやタブレットで、Scratchで作ったゲームができるようになれば、まわりの友達にも遊んでもらえますよね!
プログラムは、前回作ったパチンコ操作とよく似ています。
フリック操作を考える
まずは、フリックを作ってみましょう。
フリックは、ディスプレイを指で"すばやくはらう"動作ですね。文字を入力するときに、フリック入力なんて操作を使います。
この操作は、3つの段階に分けることができます。
- ready:何もさわらない
- flick:画面にタッチ。そのまま、指で位置を変える
- go:指をはなすと、はっしゃ!
この3つの状態は、特定のアクションで変化します。図にすると、こんな感じです。
マルが状態、矢印がアクション。「go」から「ready」には、強制的に進みます。この図だけ見ると、実は前回のストリングアクションとほとんど同じです。「flick」から「ready」へ、キャンセルで戻れるところが違っています。
プログラミング - フリック
この3つの状態に合わせて、プログラムを作っていきましょう。ここでは、状態ごとにブロックのかたまりを用意します。また、状態をあらわす「state」変数を用意します。
1. 指の動きに合わせる
まずは、指の動きに合わせて動くだけのプログラムです。
「ready」で、タッチされるのを待ちます。スプライトが押されたら「flick」に移行します。「マウスが押された」でなくなるまで、指の位置に合わせて移動して。指を離したら「ready」に戻ります。
指を離した時「0.1秒待つ」が入っているのは、「ready」と「flick」が重なるのを防ぐため。発射しないので、まだ「go」はありません。
01 Flick Test on Scratch
https://scratch.mit.edu/projects/303388358/
2. 指をはなすと飛んでいく
パチンコ操作と違って、指を動かした方向に発射します。
そのため、飛んでいく方向を検出できるよう「start」スプライトを追加しました。マウスが押されなくなったら、向きを「start」に向けてから「180度回す」しています。これで、「start」とは反対方向を向きます。そして、「goを受け取ったとき」ブロックに移動して移動を始めます。「speed」は、「startまでの距離」を元に計算しています。
でも、これだと、パチンコ操作と方向以外は同じで、ゆっくり指を動かしても操作できてしまいます。
02 Flick Test on Scratch
https://scratch.mit.edu/projects/303622035/
3. すばやく動かす
そこで、タイマー追加して。指を動かせる時間と距離の上限を設定しています。一定の時間以内(0.6)なら発射して、そうでなければキャンセルして「ready」に戻ります。
「speed」は、マウスを離したポイントまでの距離と、マウスを離した時間から計算しています。マウスを離したポイントが一定の距離を超えたら、その上限の値に抑えています。
これで、フリック操作の完成です。
03 Flick Test on Scratch
https://scratch.mit.edu/projects/303736128/
ゲームっぽくする
そこで、簡単なゲームっぽくしてみました。フリックでボールを発射します。ボールは、放物線で落下します。
ただ、あんまり面白くないなぁ。ボールの発射なら、ストリングアクションのほうが、ちゃんと狙いを付けられていいかも。
Flick Shoot on Scratch
https://scratch.mit.edu/projects/304067514/
スワイプを作る
次は、スワイプを作ります。今回は、イラストを入れ替えるプログラムを作ってみましょう。これも、ストリング・アクションやフリックとよく似ています。
スワイプ操作を考える
操作は、4つの段階に分けることができます。
- ready:何もさわらない
- swipe:画面にタッチ。そのまま指で位置を変える
- slide_out:指をはなすと、絵が外に移動
- slide_in:反対側から、次の絵が中に移動
図にすると、こんな感じです。
フリックで「go」だったところが、「slide_out」と「slide_in」に変わりました。スワイプでイラストを外に移動させて、反対側から次のイラストを中に移動させています。「slide_out」から「slide_in」、「slide_in」から「ready」には強制的に移行します。
プログラミング - スワイプ
スワイププログラムは、こんなふうに、フリックの「2. 指をはなすと飛んでいく」の続きになっています。「swipe」状態で、指をはなすか一定の距離を超えたら、「slide_out」に移行します。
10 Swipe Test on Scratch
https://scratch.mit.edu/projects/305944329/
イラストを入れ替える1
単純なイラストを入れ替えるプログラムを作ってみました。
11 Swipe Viewer on Scratch
https://scratch.mit.edu/projects/305956157/
イラストを入れ替える2
こちらは、顔とからだ・あしを合わせるパズル?ゲームです。
Swipe Me - へんしんどうぶつ on Scratch
https://scratch.mit.edu/projects/305964587/
やってみよう
という訳で、フリックとスワイプ操作を作りました。開発過程は、こちらのスタジオにまとめてあります。
Scratchスタジオ - へんしんどうぶつ の開発
https://scratch.mit.edu/studios/8049927
ぜひ、タブレットらしいゲームを作ってみてください。