【Scratchで簡単なゲーム作成編⑨】オープニング画面・ゲームステージを追加してみる


※ 当ページには【広告/PR】を含む場合があります。
2020/10/25
【Scratchで簡単なゲーム作成編⑧】条件を満たした時のスプライトの進化状態を追加する




今回はステージ画面やシーンの切り替えなどの際に利用する画面遷移のテクニックをプログラムに実装してみます。
画面遷移を取り入れることで、プレイヤーにゲームをより長く楽しんでもらるようになったり、ストーリー性も盛り込めるようになります。
ちなみに、今回の内容での
改造後のサンプルゲーム は以下のようになります。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

オープニング画面を作る



これまでは
🚩 を押してからゲームをスタートしていましたが、今回からゲームの最初の画面であるオープニング画面を作成してみたいと思います。

背景の追加



まずは背景に新しいコスチュームを追加してゲームのタイトルを描きます。

合同会社タコスキングダム|蛸壺の技術ブログ


コスチュームの名前は
スタート としておきます。
コードも以下のように、
🚩 が押されたイベントのブロック部も、新しく ステージ1 のメッセージを受け取ったときに変更します。

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

スタートボタンのスプライト



スタート画面にスタートボタンを押してからゲームを開始できるようにしてみます。
新しいスプライトとして、
はじまり という名前でスプライトを作成し、 スタート というボタン用のコスチュームを1つ追加します。

合同会社タコスキングダム|蛸壺の技術ブログ


次にゲームをスタートしてから、このスタートボタンを押したときに
ステージ1 イベントを送信するようなスクリプトを作ります。

スプライトをクリック方法もいくつか ありますが、 このスプライトが押されたとき ブロックを使うのが一番理解しやすいので、ローカル変数 スタート?_ を使ってループ処理を切り替えながら以下のようにしてみます。

合同会社タコスキングダム|蛸壺の技術ブログ


また、以降の内容でステージを増やす時に利用するグローバル変数
ステージ も追加しておきます。 この ステージ を使って、ゲームのステージが今どこあるのかを保持します。

他のスプライトの修正



このスタートボタンを押してゲームが開始されるか試す前に、既に
🚩が押されたとき で初期化されていたスプライトを全て ステージ1を受け取ったとき で初期化するように以下の置き換えを行います。

合同会社タコスキングダム|蛸壺の技術ブログ


またスタート画面を追加したので、それまでは必要でなかった初期化処理を追加しないといけないスプライトもあるので、以下のように最初の画面では隠せるようにしておきます。

合同会社タコスキングダム|蛸壺の技術ブログ


これでスタート画面からゲームが開始できるようになりました。

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

ステージ画面を変える



では次にゲームのステージを変える機能を追加します。
これも先程のスタート画面を実装したときと同じような理屈で、ステージ1でのゲームクリア条件だったところを、次のステージ2へ遷移するようにすることで可能となります。
なおゲームクリア機能の実装に関しては
前回のここの記事 で特集しています。
とりあえず最初は簡単なところで、ステージ2になったら背景だけ変えるようにやってみます。

スコア・スプライト



このゲームでは
スコア スプライトが点数を計算し、画面遷移のイベントをコントロールするようにしていました。 ゲームによっても作りかたは様々ですが、イベントを支配する司令塔のようなスプライトを集中的に一つに絞っておくと後々プログラムが拡張しやすいです。
ここでは前回まではゲームのクリア条件であったところを、
ステージ2 イベントを送信するように追加しておきます。

合同会社タコスキングダム|蛸壺の技術ブログ


今回はプログラム単純化のため変数
スコア が一旦ゼロリセットしますが、ゲームトータルで総得点を保持したい場合には別の仕組みが必要です。
またこのときにステージも2に変えておきます。

スコアボード・スプライト

スコアボード のスプライト内で、ステージ2が始まったときに、ステージ1で利用していたパラメータを一旦リセットさせます。
以下のように、
ステージ2を受け取ったとき イベントでステージ2の初期化を行わせます。

合同会社タコスキングダム|蛸壺の技術ブログ


今回は行いませんが、ステージ2で登場するアイテムなどを一新させるにはもうちょっと工夫が必要になります。

おきばしょ・スプライト



ステージ2が始まった直後は、食べ物置き場に置いていたエサは一旦全て消去しますので、
おきばしょ のスプライト内での ステージ2を受け取ったとき イベントの初期化は以下のようになります。

合同会社タコスキングダム|蛸壺の技術ブログ


これでステージが切り替わっても、食べ物のコスチュームが次の画面に持ち越されることはありません。

背景



アイテムの選択画面から戻ってくるときに
プレイモード のイベントから背景を選択してきましたが、今回の変更で現在のステージ毎に正しい背景をセットする必要があります。
そこでグローバル変数
ステージ を使って、ステージにあった背景を選択するようにします。

合同会社タコスキングダム|蛸壺の技術ブログ


また
🚩が押されたときステージ1ステージ2 のイベントで適切に背景が切り替わるようにしています。

他のスプライト



背景を色々と切り替わる種類が増えたことで、
背景の名前背景の番号 に依存していたスプライトは影響を受けます。 たとえば以下のように、背景の名前で判別していたものは、先程追加した背景でもプログラムが走るように修正します。

合同会社タコスキングダム|蛸壺の技術ブログ


ただし、ステージ数が多くなったり、画面の切り替えが複雑になってきたら、グローバル変数などでステージが今どこにセットされているのかを記録して使う工夫が必要になるかも知れません。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

まとめ



今回は画面遷移の実装手順のポイントに関してまとめてみました。
ステージを遷移させるにはメッセージイベントを上手く利用して、走っているスクリプトを止めたり・開始したりしなければならないため、プログラムが大きければそれだけ大変になってきます。
また、画面ごとの変数や画像などのリソースの管理も複雑になってきますので、慣れないうちは紙のメモ帳やノードブックなどに管理帳として書き留めながらゲーム開発をしてくと良いと思います。