【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法


※ 当ページには【広告/PR】を含む場合があります。
2020/09/22
2022/08/22
【Scratch入門〜中級編】スクリプトを止め方色々〜止め方を理解してゲームの中断・終了を理解する
【Scratch入門〜中級編】他のスプライトからクローンをして使う方法
以前の記事|スプライト・クローンの基本的な利用方法 でクローンを取り扱うときの注意点に関して特集していましたが、今回はもっと突っ込んだクローンの使い道を考えてみましょう。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratch入門】スプライト・クローンの基本的な利用方法

もっとも重要な機能である「クローン」の基本的な使い方と注意点を解説します。


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

クローンに識別番号を割り振る



Scratchプログラミング特有のテクニックになりますが、ローカル変数を使ってクローンに識別番号を与えるテクニックを以降で説明していきます。
練習用のプログラムをScratchのオンライン版に置いておりますので、
こちら を参考にしてください。
このサンプルプログラムをスタートすると、以下の図のようになります。

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


コピー元である
ボタン スプライトが3つクローンされるだけの単純なものです。
クローン機能はローカル変数と組み合わせることで、
暗黙的に各クローンごとに識別するための番号を与える ことが出来ます。
まずは各クローンの番号の割り振り方を詳しくみていきます。

テスト用のスプライトを作成する



まずは適当なScratchプロジェクトを作成して、スプライトのサンプルから
ボタン のスプライトを選択し、ブロックプログラミングのパレットで作業します。
ゲームがスタートした時の初期化のブロックとして、以下のようなブロックコードを作成してみます。

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


開始早々にローカル変数
ばんごう_ をゼロにして、3回のループでクローンを作成するだけですので理解は簡単だと思います。
なお、
サンプルプロジェクト で、他のスプライトとして用意していた たこ のスプライトを、メッセージイベント・ プレイモード を送ることで、動かし始めるようにしています。 このメッセージイベントは次の「クローンとの当たり判定」の節での説明に使うので、ひとまずここでは無視しておいてください。
ここでのポイントは、
クローンに割り振られるローカル変数は、クローンされた時の値が使われる 、という暗黙のルールが適用されることです。
つまりこのルールがあるので、クローンされた順番で、最初のクローンは
ばんごう_ が0、2番目のクローンは ばんごう_ が1、3番目のクローンは ばんごう_ が2、そして、オリジナルであるコピー元のスプライトには最新の値である3が ばんごう_ という識別番号として割り振られることになります。

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



これがどう重要かというと、まずScratchで「変数」というと、通常は
グローバル変数 を指す言葉となっています。
グローバル変数はプログラム全体が共通に扱える値ですので、特定のスプライトからクローンしたときに、クローンしたスプライトだけが持つ情報としては利用できない、という性質があります。
ですが作成するプログラムによっては、クローンしたスプライトだけが使える情報として区別できないと困る場合があります。
そのために用意されているScratchの仕組みが、
「ローカル変数」 です。
ということで、Scratchプログラミングに慣れてきた人は、グローバル変数とローカル変数を意識的に使い分けてみると良いでしょう。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

2つのスプライト間の当たり判定を入れる



クローンしたスプライトに、別のスプライトが触れた際に、どのクローンに衝突したかを判別するには少し工夫が必要になります。
まずは当たってくる側の
たこ のスプライトのコーディング例をみていきましょう。

合同会社タコスキングダム|蛸壺の技術ブログ
たこ のスプライトは、とにかく ボタン スプライトに触った時、 さわった イベントを送って、プログラム全体に衝突したことを知らせています。
この時、たこはどの番号のクローンに当たったかわかりませんが、とにかく
ボタン スプライトのどこかに当たったことをメッセージイベントとして発生させています。
では、
たこボタン 側のどこのクローンに当たったかをどのように判定するのでしょうか。
結論としては、
ボタン 側の設定はボタン側でしか分かりませんので、以下のような衝突判定用のスクリプトを追加する必要があります。

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


この場合、たこから
さわった イベントを受け取った際に、逆にボタンがたこに触れているかを判定し、現在たこと接触しているクローンの ばんごう_ を読み取ることでどこのクローンなのかを知ることが可能です。

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

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

識別番号ありでクローン数を増やしてみよう



先ほどまでのクローン数は3つ程度でしたが、せっかくなのでこの数を増やしてみようと思います。
クローンの数を増やしすぎると処理が重くなって動きが遅くなってしましますので、程々にして100まで増やしてみます。 同時に数百程度ならさほど重い処理にもならないと思います。
上記までのプログラムを少し手直しして、クローン数100まで増やしたプログラム(
プロジェクトの直リンはここから が以下になります。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

まとめ



今回はクローンごとに識別用の番号を設定するためのローカル変数を使ったテクニックを紹介しました。
効率の良いScratchプログラミングを目指すには、今回のテクニックがかなり有効になります。
これを機会に、
「ローカル変数によるクローンの識別番号をつけるテクニック」 をぜひマスターしてみてください。