【Scratch入門】スプライト・クローンの基本的な利用方法


※ 当ページには【広告/PR】を含む場合があります。
2020/09/07
【Scratch入門】リストの『挿入』・『削除』をじっくり理解する
【Scratch入門】リミックスのやり方〜気になるプログラムからScratchを自習する方法


本ブログ記事の内容では、
クローンを使ったスコア表示のプログラム の中で、スプライトのクローンを利用しました。
たくさんのスプライトを動かすアクションゲームなどを作成したい場合、敵や障害物、アイテムなどを効率よく出現させるためにはクローンの使い方に慣れておく必要があります。
ただし、クローンはScratchのプログラミングの中でも、一番分かりにくい機能のひとつであり、取り扱いには注意が必要です。
この記事では、クローンの基本的な使い方とプログラミングする上での注意点を特集します。


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

材料の下準備



今回はデフォルトの猫のスプライト・
スプライト1 に、以下のように4つのコスチュームを追加して、名前を 1,2,3,4 にしておきます。

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

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

単純なクローン



まずは、単純なクローンを1回だけやってみましょう。
下の図のようなプログラミングブロックを組んで、
🚩 ボタンを押すと、猫のスプライトのクローンが作成されます。 ただし、この場合、おなじ座標に複製されるため、クローンを確認するにはマウスで掴んでドラッグすると重なっているのが確認できます。

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


ここで注目すべきは、画像の描画される順序です。
デフォルトでは、クローンはスプライトの裏側に複製されていると思います。
次に、クローンを元のスプライトとは離して作成してみます。

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


クローンだけを移動したい場合、特別なイベントである
クローンされたとき イベントを利用します。
この
クローンされたとき ブロックを使う場合の注意点として、その時に複製されるひとつのクローンだけに影響を与えるブロックです。 つまり、対象のクローン以外の他のスプライトやクローン、背景などの値を変えたい場合には、この クローンされたとき ブロックに入れてはいけません。
例えば、元のスプライトを2番目のコスチュームして複製したい場合を考えると、以下のようなプログラミングブロックでは、
クローンされたとき ブロックにコスチュームを変えるブロックを入れてしまったために、クローンだけのコスチュームが変わってしまいます。

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


この場合、元のスプライトを変えたい場合には、スクリプト全体に影響を与えるブロックへ入れる必要があります。

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


また複製のタイミングにも注意が必要です。
クローンは元のスプライトの状態をそのままコピーするので、この例でいうと、クローンを作成してから元のスプライトのコスチュームを変えてしまっているので、クローンのコスチュームは更新されず古いコスチュームのままになってしまいます。

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


以上のことから、クローンを使う際には、
クローンされたとき イベントの中身と、クローンするブロックを入れる順番に注意を払う必要があります。


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

クローンとローカル変数の組み合わせ



ちょっとだけクローンの数を増やして使ってみます。
変数を使ってクローンの横への移動量をコントロールするために、今回は
ヨコ_ というローカル変数を追加します。

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


まずは上手くいかない例からやってみましょう。
下のプログラムは4回分のクローンを生成して、そのたびに横方向に+100ずつ複製が移動するように見えるのですが、

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


結果は、クローンたちがおなじ座標になって団子の状態で表示されてしまいます。

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


なぜクローンが移動しなかったのというと、先程も触れたように、
クローンされたとき イベントブロックはそのときクローンされたスプライトだけに影響を与える特別なブロックですので、ローカル変数 ヨコ_ の値に影響を与えることなく処理されているからです。 つまり、 クローンされたとき イベントブロックには、変数は読み取り専用として扱われ、値を保持しておくことができません。
ということで、ローカル変数のブロックの場所をもう少し検討します。
まずは変数の演算の場所をクローンする前に入れてみます。

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


すると期待通りに、クローンの座標が重ならないようになりました。

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


すこしプログラミングブロックが長くなってくると読みにくいので、引数つきの定義ブロックを利用して、繰り返しのブロック処理のパターンをパッケージ化してみます。

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


適当な名前でいいので、ブロック名は
ふくせいとうごき 、引数は コスチュームばんごう とでもしておきます。

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


引数つきの定義ブロックを上手く使うと、長めのブロックもすこし短くスッキリ書ける場合があります。


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

まとめ



スプライトのクローンは便利ですが、利用するときに扱いをよく理解している必要があります。
クローンが何か意図としない動きをしたら、
クローンしたとき イベントブロックの中身をよく確認してみると良いかもしれません。