こんにちは、まなゲー池田です。
Scratchでゲーム制作入門。モグラ叩き、迷路ゲームときて、
今回から「見下ろし型シューティングゲーム」を作っていきます。
今日はプレイヤーキャラをキー操作で上下左右に移動できるようにするところをやっていきたいと思います。早速始めましょう。
プレイヤーキャラにするスプライトを選ぶ
これまで初期からいるネコさんを使ってきましたが、今日は主人公(プレイヤーキャラ)にするスプライトを選ぶところからやっていきましょう。
「新しいスプライト」のところから、顔アイコンを選んでクリックします。
表示される候補から、好きなものを選びます。
今回は「乗り物」から宇宙船(Space ship)を選びました。
ネコさんは使わないので、可哀想ですが右クリックメニューから削除してしまいます。
こんな感じで主人公用スプライトの準備ができました。
必要な変数を作っておく
宇宙船の中身を作っていく前に、必要になりそうな変数を2つ作っておきます。
「データ」パレットを開いて「変数を作る」ボタンを押して、
「とくてん」と「スピード」を作りました。
「とくてん」を使うのはしばらく先になりますが、先に作っておきます。
初期化する(向きと座標)
では、宇宙船に中身を入れていきますよ。
まずは、初期化(最初の状態を決めておく)です。面倒に思いがちですが、やっておく習慣をつけましょう。動きのあるスプライトでは初期角度と初期座標ぐらいは決めておく方が良いです。
キー操作で上下左右に移動できるようにする
ようやく今日の本題、キー操作に入ります。
で、イベントパレットを見ると、いかにも「キー操作はこれを使ってね!」な感じで下記のようなブロックがあるんですが、これはあまりおすすめ出来ないブロックです。なので使いません。
(後で、おすすめしない理由がわかるスクリプトも載せますので、興味がある人は比べてみてください。)
上下左右に同じスピードで動くようにしたいのと、作った後で動かしてみてスピードを調整することを前提としているので、先ほど作った「スピード」変数を使っていきます。ひとまず「スピード」の値は5にしておきます。
で、その下に「ずっと」ブロックをくっつけておきます。
このブロックが非常に重要になってきます。
今回はキーボードの矢印キーで上下左右に動かしたいので、それらのキーが押されたかどうかを調べるプログラムが必要になります。で、「キーが押されている!」ということになったら押されているキーに合わせて、宇宙船の座標を移動させてやらなければいけません。
- 「〜キーが押されているかどうか」調べる
- もし押されていたら
- 宇宙船スプライトの座標を(移動1回分=「スピード」分)変えてやる
という処理を、下のブロックを使って組み立てます。
まずは「右向き矢印キー」が押されたら、右へ「スピード」分移動というのを作ります。
「右へ移動」というのは座標で表現すると「x座標の値を増やす」ということになります。
これらをブロックで表現するとこのようになります。
これを応用して、今度は左むきの移動を作っていきます。
左に移動するとは「x座標を減らす」ということなので「-スピード」(マイナス「スピード」)ずつ変えるという指示を出してやります。
負の数は中学校の範囲ですが、小学生でも、こういう動きを作る中で使っていくと割とすぐに理解してくれます。
おさらいを兼ねて、各方向への移動を座標と値の変化で表現します。
右移動:x座標の値を増やす
左移動:x座標の値を減らす
上移動:y座標の値を増やす
下移動:y座標の値を減らす
これに合わせて、上下の移動も作っていきましょう。
4方向への動きを全て組み上げたら、それらを全部まとめて、「ずっと」ブロックの中に入れてやります。
ここまでをまとめるとこんな感じになりますが、なぜ「ずっと」が重要なのでしょうか。
以前にもお話ししましたが、コンピュータは基本的に「待つ」ということが出来ません。「もし〜キーが押されたなら・・・」というチェックもそのブロックのところが読み込まれた、その時1回だけやるというのが基本になります。
我々人間なら、例えば「電話がなったら出てね」と言われれば、電話がなるまでずっとそのことを気にかけます(忘れてしまうことが良くあるのも事実ですがw)。しかし、コンピュータ的に見てみると、その指示を受けたその場で「電話がなっているかどうか」を調べ「なっていません」となったら、もう次の処理へ行ってしまって、その後電話がなろうがなるまいが気にしません。
なので、違和感を感じるとは思いますが、「〜したら・・・してね」というタイプのお願いをコンピュータにする場合は、基本的に何らかの繰り返し、一番単純なのは「ずっと」をつけておいてあげないと、こちらの狙い通りに動いてくれないということになってしまうのです。
「左移動、下移動はマイナス」というのはすぐに理解してくれる子ども達も、この違和感はなかなか馴染まないらしく、「ずっと」は常に忘れられがちで「動かない!」の元となります。
話が長くなってしまいましたが、ひとまずこれで宇宙船はキー操作で上下左右に動くようになりました。今回はここまでとしておきます。
おまけ:おすすめしないブロックを使った場合
今回のようにちょっと複雑なプログラムを頑張って組まなくても、下記のようなシンプルなプログラムで上下左右移動は実現可能です。
しかし、実際にやってみるとわかりますが、非常にカクカクした動きしか出来ない上に、斜め移動が出来ません(2つ同時に押している状態に対応できない)。そのほか、プログラムをスタートさせていない(旗ボタンなどを押していない)状態でもキー入力を受け取ってしまうなど、いろいろ残念な仕様になっています。
学習上も、繰り返しや条件分岐といった重要な概念を楽しく学べる場面をみすみす逃すことになりますので、早い段階であってもキャラクター移動は今回のような形で作ってみることをおすすめします。