スクラッチプログラミングに挑戦している皆さん、どうも!スクラッチコーチです。
フルーツを
落として
進化させていき、
大きなスイカを
作ったりハイスコアを
目指すピースフルなゲーム、それが
話題沸騰のスイカゲームだ!スクラッチ
版でもスイカゲームがたくさん
作成されており、
本家に
迫るクオリティを
見せているので
驚き!
今回はその
中の1つをモバイルスティックを
導入して
完全モバイル
対応するという
試みだよ。リミックスさせていただいたのはこちらの
作品!
ジョイスティックの
導入事例として、
一緒にリミックス
方法を
見てみよう!
一緒にコーディングする
人はこの
作品をリミックスしておいてね。
今回の目標「ジョイスティックでスイカゲームの雲を動くようにリミックスする」
スイカゲームで
移動が
必要になるのは、
上に
浮かんでる
雲だ。この
子を
動かしていく。
実はリミックスする
前から「モバイル」というコントロール
方法があって、タップすると
雲がタップした
場所に
瞬間移動してフルーツを
落としてくれる。ただスイカゲームやってると
落とすところを
正確に
測って
狙い
撃ちするのが
楽しいという
面もあるから、
瞬間移動ではなくてジョイスティックを
使ってゆっくり
左右に
移動する
方式に
変えていきたいと
思う。
完成品の確認
モバイル
対応した
完成品がこちら↓
バックパックを導入する
リミックスした
作品にスティックを
導入していこうか。
バックパックに入れる
一応モバイルのスティックをバックパック
化するところから
紹介するよ。もし
自分のプロジェクトにスティックがないという
人は、
チュートリアルで一緒に作るか、
こちらのプロジェクトからスティックをバックパックしちゃおう。
バックパックから取り出す
ではリミックスしたスイカゲームを
開いて、
今度はバックパックからスティックを
取り
出そう。
これで
準備OKだ!
雲の移動方法をスティックに変更する
スプライト「くも」を
開くと
移動方法が
実装されている
箇所が
見つかるよ。メッセージ「GO2」を
受け
取ったときを
見てみてね。
モバイルとパソコンの
移動方法があるね。
前回のモバイル対応事例では
一部を
変えてモバイル
対応したけど、
今回はごっそり
削除してスティックで
移動させる
方式に
変更してみたいと
思う。ずっとブロック
内を
全部消してみる。
削除後はこうなるよ。
ok-scratch
u003cpu003e一応書いておくと、ダメだから全部消したわけではなく、今回は前回とは趣向を変えたものにしたいから消しただけだよ。u003c/pu003e
X座標をスティックXに合わせて変える
ではスティックXの
値を
割り
当ててみよう。
実はたったこれだけでもそれなりに
動くw
でも
問題が2つ
見つかる。
- 最初のタップでフルーツが落ちてしまう
- 箱のわくを越えた場所に雲が移動できてしまう
逆に
言えばこの2つを
解決したらリミックス
完成だ!やってみよう。
わくの外に出ないようにする
まずはわく
問題から
解決していく。
ブロック定義「_わくに触れたか調べる」を作る
調べる
系のブロック
定義を
作っておくと
早い。
再描画無しで1つ
作っておくので、
接頭語にはアンダーバーを
付けておこう。
変数「わくに触れたか」を作る
このブロック
定義の
実行結果を
保持する
変数を
用意しよう。
ここでの作戦内容
実際に
移動させる
前に、この
再描画なしのブロック
定義の
中で
移動をシミュレーションしてみる。その
結果、わくに
触れたら
変数に1を、
触れてなければゼロを
入れるというのがここで
作りたい
処理だよ。まずはいきなり
変数にゼロを
入れてしまおう。
仮に移動させてみる
次にくもを
移動させてみよう。これはブロック
定義の
最後に
戻すから、
仮移動みたいなものだよ。
わくに触れたら変数を1にする
この
状態でわくに
触れているかどうかを
調べればOKだ。
元の位置に戻す
触れてても
触れてなくても、いったん
元の
位置に
戻そう。
OK、これでブロック
定義内は
完成だよ。
わくに触れてない場合だけ実際に移動させる
これをずっとブロック
内で
使っていくよ。
わくに触れないかテストする!
よしよし、
触れる
一瞬前に
止まっているぞ!これで1つ
目の
問題は
解決できた。
ok-scratch
u003cpu003eちなみにさっきのブロック定義内で仮移動をしっかり元の位置に戻してないと、触れたが最後、くもが動かなくなってしまうので注意。u003c/pu003e
スティックボタンでフルーツが落ちるようにする
2つ
目の
問題を
解決すると
同時に、フルーツの
落とし
方をスティックボタンを
押したタイミングに
変えていこう!
今度はスプライト「ゲーム
本体」を
開いてみて。
スティックボタンの値でフルーツを落とす
このスプライトにもメッセージ「GO2」を
受け
取ったときがあって、そこで
従来のフルーツを
落とす
方法が
定義されている。
変更前
変更後
これをスティックボタンの
値に
変更していく。
こうすればスティックボタンによって
落ちる
方式に
変わったし、
同時に
最初のタップでは
変数の
値が1にはならないのでフルーツが
落ちなくなったはずだ。
フルーツがちゃんと落ちるかテストする
おっけい!これで
問題はなくなった!
完成と
言ってもOKでしょう。
さらに改善してみる
ココで
終わってもいいけど、さらに
改善していきたい。
- スティックにアソビを設ける
- スティックの登場タイミングを変えたい
スティックアソビを設ける
イマはちょっとでも
動かすと
雲が
反応してしまうので、スティックXの
値が0.2より
小さいときは
無視するようにしたい。
スティックの登場タイミングを変える
ゲームスタートしてから
登場するように
変えたい。それまでは
使わないから、
誤解を
招きかねないし。まずはスプライト「スティック」を
開いてね。
メッセージ「GO2」を
受け
取ったときを
新たに
設置して
初期化処理を
移動するよ。
そして「
隠す」と「
表示する」を
設置しよう。
これでタイミングは
問題ないでしょう!
まとめ
話題のスイカゲームをモバイル
対応したよ。
実は
公開してあるリミックス
作品は
上記以外にも
何点かミニ
改善してある。
- ジョイスティックの色が悪目立ちしてた(黒すぎ)から、世界観にあう色にした
- ゲームスタート画面からPCとモバイルの操作を切り替えられるボタンを消して、モバイルのみにした
- 小さく書いてあった「十字キー移動 A落とす」という説明書きを消した
今回やってみて
思ったのが、やっぱりグリフパッチさんが
教えてくれたジョイスティックは
汎用性が
高くて、どんな
作品にも
相性がバッチリなんじゃないかなっていうこと!どんどん
色々モバイル
化しちゃいたくなるw