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


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

本ブログ記事の内容では、
クローンを使ったスコア表示のプログラムの中で、スプライトのクローンを利用しました。

たくさんのスプライトを動かすアクションゲームなどを作成したい場合、敵や障害物、アイテムなどを効率よく出現させるためにはクローンの使い方に慣れておく必要があります。

ただし、クローンはScratchのプログラミングの中でも、一番分かりにくい機能のひとつであり、取り扱いには注意が必要です。

この記事では、クローンの基本的な使い方とプログラミングする上での注意点を特集します。


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

材料の下準備

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

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


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

単純なクローン

まずは、単純なクローンを1回だけやってみましょう。

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

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

ここで注目すべきは、画像の描画される順序です。

デフォルトでは、クローンはスプライトの裏側に複製されていると思います。

次に、クローンを元のスプライトとは離して作成してみます。

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

クローンだけを移動したい場合、特別なイベントである
クローンされたときイベントを利用します。

この
クローンされたときブロックを使う場合の注意点として、その時に複製されるひとつのクローンだけに影響を与えるブロックです。つまり、対象のクローン以外の他のスプライトやクローン、背景などの値を変えたい場合には、このクローンされたときブロックに入れてはいけません。

例えば、元のスプライトを2番目のコスチュームして複製したい場合を考えると、以下のようなプログラミングブロックでは、
クローンされたときブロックにコスチュームを変えるブロックを入れてしまったために、クローンだけのコスチュームが変わってしまいます。

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

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

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

また複製のタイミングにも注意が必要です。

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

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

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


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

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

ちょっとだけクローンの数を増やして使ってみます。

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

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

まずは上手くいかない例からやってみましょう。

下のプログラムは4回分のクローンを生成して、そのたびに横方向に+100ずつ複製が移動するように見えるのですが、

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

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

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

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

ということで、ローカル変数のブロックの場所をもう少し検討します。

まずは変数の演算の場所をクローンする前に入れてみます。

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

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

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

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

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

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

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

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


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

まとめ

スプライトのクローンは便利ですが、利用するときに扱いをよく理解している必要があります。

クローンが何か意図としない動きをしたら、
クローンしたときイベントブロックの中身をよく確認してみると良いかもしれません。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

これからの"地方格差"なきプログラミング教育とは何かを考えながら、 地方密着型プログラミング学習関連テーマの記事を不定期で独自にブログ発信しています。

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