※ 当ページには【広告/PR】を含む場合があります。
2020/10/14
2022/08/22
【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法
Scratchのプログラミングでゲームを作る際には、ブロック内のスクリプトの止め方を工夫することで、色々なステージを切り替えられたり、スプライトの動きを止めたり再開したりすることができます。今回は制御
のブロックの中の何通りかあるスクリプトの止め方を深堀していきます。
【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選
待つ系の処理
〇〇まで待つ
ゲームの途中で、スプライトや背景の動きを中断・再開を行いたい場合に使うことができます。以前の記事で作ったタコの泳ぐだけのプログラムの中身に、スペースキーが押された時まで待つように、下の図のようにループ内にブロックをおくと、スペースを押すごとに、たこが1回動くようになります。またスペースを押しっぱなしにすると、たこはずっと動き続けます。〇〇まで繰り返す
では下の図のように先ほどの〇〇まで待つ
の箇所を単純に〇〇まで繰り返す
で置き換えてみてみると、今度はスペースを押さない限りたこのスプライトは動き続けます。スペースを押しっぱなしにしたときにだけ、たこの動きを止めることが出来ます。スペースキーが押された続けた時にスペースキーが押された
ブロックは真(true)になり、その真になったときに〇〇まで繰り返す
の中身の処理が止まります。ゲームの中断中に別の処理を行いたい場合には、こちらのブロックのほうが便利です。先ほどの〇〇まで待つ
と〇〇まで繰り返す
は処理の働きとしては、真逆の関係にあります。ここに置いたでもプログラムでは、以下の図のように〇〇まで繰り返す
ブロックを組み込んだオリジナルのスプライトと、〇〇まで待つ
を組み込んだクローンの動きが、スペースキーを押すごとに(もしくは押しっぱなしにして)切り替わっていることを確認できます。使い分けのポイント
特定の条件を満たしている間は動かしたい(処理させたい)場合には、〇〇まで繰り返す
ブロックを使います。逆に特定の条件になっている間は、動かしたくない(処理させたくない)場合には、〇〇まで待つ
ブロックの方でコーディングします。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
止める系の処理
このスクリプトを止める
このブロックは、スプライトや背景一つ一つの単位で走っているスクリプトを止める場合に使用します。このスクリプトを止める
ブロックで止まるのは、このブロックが呼び出されたスプライト、クローン、背景の一つのスクリプトに限定されるので、他のスクリプトはそのままずっと動いている状態になります。止める
系で止められたスクリプトは、その時点で処理が完了してしまうので、再開することはできなくなります。要らなくなった処理をいつまでも残しておくと、メモリを無駄にしてしまうだけですので、容量の大きなゲームになってくるほど、このスクリプトを止める
ブロックを正しく使って止めてしまうことが重要です。まず簡単な例をやってみます。先ほどのスペースキーでオリジナルのスプライトとクローンの動きが切り替わるプログラムをほんのちょっとだけ変えてみます。サンプルプログラムはここにあります。スペースキーを押すと、オリジナルのスプライトにこのスクリプトを止める
ブロックが作用して、このスプライトの処理が止まってしまいます。一方でクローンの処理には影響せずに動き続けることができます。すべてを止める
文字通りすべてのスプライト・背景で走っているプログラムがすべて終了します。このすべてを止める
ブロックの使い道は、ほぼゲームオーバー時などのゲームのリセットに限られると思います。このブロックの機能としては特に説明するほどのものでは無いのですが、先ほどのサンプルプログラムをさらに修正して最後にすべてを止める
ブロックを使えるようにしてみます。このサンプルプログラムはここです。先ほどまでのサンプルプログラムよりも一気に複雑にしています。まずクローンを4つに増やして、クローンの識別番号をつけるテクニック(詳細については以前紹介した記事を参照)を利用し、それぞれのクローンをコントロールできるようにしています。【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法Scratchの中級者向けのテクニックとして、クローンの特殊な使い方を解説します。
また、今回はスペースキーを押す度に、オリジナルのたこを止める
-> クローン1を止める
-> クローン2を止める
-> クローン3を止める
-> クローン4が消えたらすべて止める
という処理が変化の流れになっています(下の図のイメージ)。どのたこのスクリプトを止めるかは、グローバル変数つぎにとめる
の番号をスペースキーが押される度にカウントアップさせ、クローンの持つ識別番号であるローカル変数ばんごう_
と一致したときに実行するようにしています。ちなみに、スペースキーを離した
タイミングを取得するテクニックはこちらの方の記事を参考にしました。実際にはこのテクニックと共に、スペースキーを押した・離したをトリガー(ON/OFF)として利用するためには、グローバル変数キーおされた
でスペースキーの状態を記憶しておく必要があります。スプライトの他のスクリプトを止める
最後に一番使いどころがなさそうなスプライトの他のスクリプトを止める
を説明しましょう。多分このブロックが一番分かりにくいかもしれません。同じスプライト内で走っているスクリプトの中で、そのスプライトの他のスクリプトを止める
が仕込まれているプロック以外のスクリプトが止まり、自分だけが実行され続けます。またこのとき、別のスプライトや背景のプログラムには影響が無いので、そちらも走り続けます。このブロックの使いどころとしては、画面が切り変わったり、新しいゲームステージに遷移したりするときに、それ以前に走っていて不要になった古い処理をすべて捨て去ることができます。先ほどのサンプルプログラムに再度、画面を遷移させる機能を追加してみます。仕上がったサンプルプログラムはこちらです。このデモサンプルも下に貼っておきます。先ほどのサンプルプログラムからのプログラミングの変更点としては、たこのスプライト側でゲームが終了したフラグ(ここではつぎにとめる=5
)を満たした際に、ゲームオーバー
のイベントを発生させ、背景のプログラミングブロック側がそのイベントを受け取った際に、スプライトの他のスクリプトを止める
ブロックを呼び出て、それ以前に走っていた古いプログラムを全て止めています。複雑な画面遷移を行うゲームを作成したい場合には、このスプライトの他のスクリプトを止める
ブロックを上手
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
まとめ
今回はスプライトの止め方のバリエーションをまとめて解説しました。スクリプトの止め方一つとってもそれぞれ性質に違いがあり、Scratchでより複雑なゲームを作成したい場合には、それぞれの止め方の特性を良く理解してからプログラミングに取り掛かかるのが良いと思います。