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


2020/09/22
2022/07/22

以前の記事(スプライト・クローンの基本的な利用方法)でクローンを取り扱うときの注意点に関して特集していましたが、今回はもっと突っ込んだクローンの使い道を考えてみましょう。


合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchを学べるオンライン&駅前プログラミングスクール5選

合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

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

Scratchプログラミング特有のテクニックになりますが、ローカル変数を使ってクローンに識別番号を与えるテクニックを以降で説明していきます。

練習用のプログラムをScratchのオンライン版に置いておりますので、
こちらを参考にしてください。

このサンプルプログラムをスタートすると、以下の図のようになります。

合同会社タコスキングダム|タコキンのPスクール

コピー元である
ボタンスプライトが3つクローンされるだけの単純なものです。

クローン機能はローカル変数と組み合わせることで、
暗黙的に各クローンごとに識別するための番号を与えることが出来ます。

まずは各クローンの番号の割り振り方を詳しくみていきます。

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

まずは適当なScratchプロジェクトを作成して、スプライトのサンプルからボタンのスプライトを選択し、ブロックプログラミングのパレットで作業します。

ゲームがスタートした時の初期化のブロックとして、以下のようなブロックコードを作成してみます。

合同会社タコスキングダム|タコキンのPスクール

開始早々にローカル変数
ばんごう_をゼロにして、3回のループでクローンを作成するだけですので理解は簡単だと思います。

なお、
サンプルプロジェクトで、他のスプライトとして用意していたたこのスプライトを、メッセージイベント・プレイモードを送ることで、動かし始めるようにしています。このメッセージイベントは次の「クローンとの当たり判定」の節での説明に使うので、ひとまずここでは無視しておいてください。

ここでのポイントは、
クローンに割り振られるローカル変数は、クローンされた時の値が使われる、という暗黙のルールが適用されることです。

つまりこのルールがあるので、クローンされた順番で、最初のクローンは
ばんごう_が0、2番目のクローンはばんごう_が1、3番目のクローンはばんごう_が2、そして、オリジナルであるコピー元のスプライトには最新の値である3がばんごう_という識別番号として割り振られることになります。

合同会社タコスキングダム|タコキンのPスクール

これがどう重要かというと、まずScratchで「変数」というと、通常は
グローバル変数を指す言葉となっています。

グローバル変数はプログラム全体が共通に扱える値ですので、特定のスプライトからクローンしたときに、クローンしたスプライトだけが持つ情報としては利用できない、という性質があります。

ですが作成するプログラムによっては、クローンしたスプライトだけが使える情報として区別できないと困る場合があります。

そのために用意されているScratchの仕組みが、
「ローカル変数」です。

ということで、Scratchプログラミングに慣れてきた人は、グローバル変数とローカル変数を意識的に使い分けてみると良いでしょう。


合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchを学べるオンライン&駅前プログラミングスクール5選

合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

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

クローンしたスプライトに、別のスプライトが触れた際に、どのクローンに衝突したかを判別するには少し工夫が必要になります。

まずは当たってくる側の
たこのスプライトのコーディング例をみていきましょう。

合同会社タコスキングダム|タコキンのPスクール

たこのスプライトは、とにかくボタンスプライトに触った時、さわったイベントを送って、プログラム全体に衝突したことを知らせています。

この時、たこはどの番号のクローンに当たったかわかりませんが、とにかく
ボタンスプライトのどこかに当たったことをメッセージイベントとして発生させています。

では、
たこボタン側のどこのクローンに当たったかをどのように判定するのでしょうか。

結論としては、
ボタン側の設定はボタン側でしか分かりませんので、以下のような衝突判定用のスクリプトを追加する必要があります。

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール


合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchを学べるオンライン&駅前プログラミングスクール5選

合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

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

先ほどまでのクローン数は3つ程度でしたが、せっかくなのでこの数を増やしてみようと思います。

クローンの数を増やしすぎると処理が重くなって動きが遅くなってしましますので、程々にして100まで増やしてみます。同時に数百程度ならさほど重い処理にもならないと思います。

上記までのプログラムを少し手直しして、クローン数100まで増やしたプログラム(
プロジェクトの直リンはここから)が以下になります。


合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchを学べるオンライン&駅前プログラミングスクール5選

合同会社タコスキングダム|タコキンのPスクール【Pスクール厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

まとめ

今回はクローンごとに識別用の番号を設定するためのローカル変数を使ったテクニックを紹介しました。

効率の良いScratchプログラミングを目指すには、今回のテクニックがかなり有効になります。

これを機会に、
「ローカル変数によるクローンの識別番号をつけるテクニック」をぜひマスターしてみてください。