※ 当ページには【広告/PR】を含む場合があります。
2022/08/13
Scratchから始めるシューティングゲームの作り方③〜敵の弾・敵の動きを改良する
Scratchから始めるシューティングゲームの作り方⑤〜長い背景の作り方と敵の出現パターンを設定する
Scratchでシューティングゲームを作成してみる特集の4回目です。今回は、シューティングゲームで良く見る「動く」背景を追加して、より動いている感じにゲームを改良してみます。なお、この記事は前回までのプロジェクトをそのまま利用します。改造前プロジェクト|シューティングゲーム③いきなりこちらの内容に取り組んでいただくと、少々チンプンカンプンかもしれませんので、前回の記事を良く理解しておきましょう。Scratchから始めるシューティングゲームの作り方③〜敵の弾・敵の動きを改良するScratchのシューティングゲームで敵の動きをより深く作り込んでいきます。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
背景をスプライトとして使う方法
横に自動でスクロールする背景で、基本となるパターンは、簡単な一枚の写真の端と端をつないで連続している背景にするテクニックです。まずは、シューティングゲームを作成するなら、まずこのテクニックを習得しておきたいところです。最初の練習は一番シンプルな背景を使って、背景を動かすということをやってみましょう。サンプルから、『Blue Sky』の画像を選択してみます。ここで、Scratchの背景を動かすという場合、この「背景」には大きな問題があります。この背景のままだと、シューティングゲーム用のスクロールする背景は作れないので、背景のスプライト化を行うことで、動かすことができるようになります。[描く]からスプライトを新規作成
し、[ステージ] > [背景]
に移り、先程の背景画像を選択したら、そのままマウスでドラックアンドドロップして、スプライトへ背景を移します。背景の画像は邪魔なので、削除しておきましょう。とりあえず背景のスプライトに問題がないか、下のブロックを背景のスプライトに追加して、ゲームを起動してみます。...すると、背景のスプライトの画像を一番後ろの層へ移動したにも関わらず、ハートのライフスコアが隠れてしまいました。ハートのライフスコアを作成した以下の記事でも解説していましたが、このハートのライフスコアは、「スタンプ機能」で作成していたことを思いだしてください。Scratchから始めるシューティングゲームの作り方①〜最初のプロジェクトを作成シューティングゲーム作成を通じてScratchでプログラミングを学習していきましょう。
スタンプは一見、便利な機能ですが、その機能は背景の画像に上書きして表示していることに過ぎません。つまり、背景と一緒で、スプライトの画像より前の層に表示されること無いため、「背景のスプライト化」をしてしまうと、基本的にスタンプは利用することができません。そこで重要となるのが、『スプライトのレイヤー(層)の設計』という考え方です。スプライトのレイヤーの設計
Scratchプログラミングで、背景を除いたすべてのスプライトが表示されるときに、どの順序で表示が優先されるかは、裏側で動くシステムのプログラムによって、自動で番号が割り振られています。背景はもともと、もっとも奥のレイヤーに配置されて、その上がスプライトのレイヤー0、さらにその上がレイヤー1、...というように、スプライト1つにレイヤー1つが対応するように並べられることで、プログラムの表示の優先順位が決定されているわけです。このレイヤー番号を、システム任せにするのではなく、“できるだけ”
自分の決めたレイヤーで描画することを、ここでは「スプライトのレイヤー設計」と呼ぶことにします。“できるだけ”
と表現したのは、スプライトからクローンしたスプライトも、当然のことながら、レイヤー番号が個別に割り振られてしまうので、クローンの数まで考慮したレイヤー設計は不可能に近い、という意味を込めています。そこで基本方針として、ブロックコードにクローンを使っているものは、できるだけ優先順位を下げて、番号の高いレイヤーにもっていきます。これまでの記事で、このScratchシューティングゲームのプロジェクトには合計9つのスプライトを作り込んできました。一旦、ここで、各スプライトの名前を以下のように整理してみます。この各スプライトには、以下のように優先順位(レイヤー番号)を割り振ってみます。現在のプログラムでは、背景のスプライトの表示順序が必ずどのスプライトよりも奥側に来る、という1点だけが重要になってきます。なので、レイヤー0:背景
以外の順序は、まだこの段階ではさほど重要ではないので、適当に決めてもらってもOKです。背景
のスプライトのブロックコードを以下のようにします。※この場合、[最背面へ移動する]
ブロックで、レイヤー0へ移動するため、[0層手前に出す]
は無くても良いです。これで、プログラム実行時に、背景
がレイヤー0になるように指定できます。同様の考え方で、プレーヤー
にレイヤー1を指定します。以降、各スプライトの初期化ブロックコード部分に、同じようなやり方で、レイヤーの番号を割り振ってみてください。(※背景
とプレーヤー
以外のスプライトは省略します。)とにかく各スプライトのレイヤーの設計を決めたので、次は「スタンプ」を使っていたスプライトを、「クローン」で作り直す必要があります。ここでは、スタンプを使っていたライフ
のスプライトだけですので、このブロックコードを大幅に修正して、クローンを使ったブロックコードに置き換える必要がありそうです。なお、クローンを使ったプログラミングは、スタンプほど簡単ではありません。毎回のごとく、出てきますが、クローンとローカル変数を使った、クローンに識別番号を与えるやり方を良く理解しておいてください。【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法Scratchの中級者向けのテクニックとして、クローンの特殊な使い方を解説します。
このテクニックに従って、ライフ
のスプライトに、ローカル変数・_残り
を追加します。このローカル変数・_残り
がハートのクローンの識別番号となります。あとは、グローバル変数・残り
が減っていくときに、_残り
の番号にマッチしたクローンが削除されるようにすれば良い、と考えて、以下のようなブロックコードに組み直します。ここで少し注意が必要なのが、[敵にヒット]を受け取ったとき
イベントが、クローンされたハートのスプライトにも反映されてしまうことです。変更前には「プレーヤーへのダメージを1回受けたら、ハートのスプライトも1減る」というロジックだったので、ハートのスプライトのコードに[残りを-1ずつ変える]
ブロックを入れていました。ここから「クローン」を使うやり方に変えると、イベントもオリジナルのスプライトや各クローン別々で受け取るようになってしまうので、「プレーヤーへのダメージを1回受けたら、ハートのスプライト+各クローンの数だけ減る」ことになってしまいます。そこで、ハートの[敵にヒット]を受け取ったとき
イベントから、残り
を減らすブロックを削除します。変わりに、少し面倒ですが、ハートのクローンの影響を受けない敵
と敵の弾
のクローンのコードへ、このブロックを移します。こうすることで、ライフスコアの表示が、背景に隠れないような表示にすることができました。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
背景を一定の速度でスクロールさせる
では、背景をスプライト化しましたので、この背景を右から左に流れるような効果を付けてみましょう。まず、背景
のスプライトにx座標を記録できるように、ローカル変数・_背景のx
を作成します。このローカル変数を上手く使って、背景が右から左に流れる動くを繰り返すことができるようにしましょう。まずは簡単なところで、背景を左(xが減る方向)にスクロールさせて、背景が画面枠から見切れる手前くらい(x < -460
程度)で、再びこのスプライトを右側へめいいっぱい戻すことを繰り返す処理をさせてみましょう。当然、これを実行すると、以下のように動くことになります。背景が動くようにできたのは良しとして、背景が動くと、その動きの繰り返しの間に、ちょうど画像1枚分の空白部分ができてしまうことになります。ということで、この問題を手っ取り早く解決するには、クローンでもう一枚同じ画像をコピーして、1枚分の右にずらすと上手く行きそうです。先程のブロックコードをさらに以下のように改良してみます。今回は、背景のオリジナルのスプライト
と背景のクローン
の2つを交互に同じ動きをさせるので、[背景を繰り返す]
定義ブロックで、ひとまとめにしています。ローカル変数・_背景のx
は、同じ名前の変数でも、背景のオリジナル
と背景のクローン
でそれぞれ独立した変数として利用することができます。クローンを生成する直前に[_背景のxを460にする]
で初期化し、初期位置を右側の画面枠より外にずらしています。クローンを作成後、オリジナルのスプライトには[_背景のxを0にする]
で、ローカル変数をもとに戻しておきます。これで、背景を移動したときの空白部分ができないようにできるため、背景がずっと右から左に流れていくように見えるでしょう。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
横に長い画像を使った背景を使う
こちらは予告編ですが、Scratchシューティングゲームでも、本格的な攻略ステージを作成する場合、先程の一定の風景の繰り返しは使わず、専用の横に長い背景画像を使ったスクロールを使うことになると思います。この長い画像を使ったスクロール背景をどのようにScratchゲームに仕込んでいくかは、次回の記事で詳しく取り上げていきます。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
まとめ
以上、今回のScratchシューティングゲームの改造内容をひとまとめにしたものは以下のようになります。背景が動いていると、相対的にプレーヤーが動いているような臨場感のある作品になります。また、背景は攻略ステージを演出する上で、なくてはならない表現のゲーム要素になるので、シューティングゲームでも非常に大切なゲームパーツになります。ここでもクローンのテクニックを少々多めに利用しましたので、少し難しく感じられたかもしれませんが、一つ一つじっくりと消化しながら理解を深めていってください。