この記事では、スクラッチ(Scratch)のクローンの使い方を紹介します。
クローンは、スプライトをコピーすることができる機能。
例えば、シューティングゲームでタマを連続して打ちたいときに、同じスプライトをたくさん作るのは大変ですね。
しかしクローン機能を使えば、ブロックひとつでスプライトを簡単にコピーできるので便利です。
- スクラッチのクローンって何?
- クローンのブロックの使い方を知りたい
- 本のプログラムを写して動かすことはできたけれど、なぜ動くのか分からない
という方向け。
クローンの機能が分かりやすい、かんたんなプログラムを例にあげながら紹介します。
スクラッチがはじめての方は、下の記事からごらんください。
クローンとはスプライトをコピーすること
クローンとは、プログラムを使ってスプライトをコピーすることです。または、コピーされたスプライトのこともクローンと呼びます。
クローンはオリジナルのスプライトの状態(座標、表示/非表示など)を引きつぎながら別のモノとして存在します。
プログラムも引きつがれます。
ペン拡張機能にあるスタンプは、選たく中のスプライトと同じ見た目の画像をステージにはり付ける機能です。
一見クローンと似ていますが、はり付けられた画像はスプライトではないので、プログラムで動きをつけることができません。
クローンに関するブロック
クローンに関するブロックは3種類。制御のカテゴリにあります。
- 自分自身▼のクローンを作る
- クローンされたとき
- このクローンを削除する
自分自身▼のクローンを作る
指定したスプライトのクローンを作成するブロックです。
自分自身の他に、別のスプライトのクローンを作ることもできます。
同時に存在できるクローンの数はプロジェクト全体で300個まで。300個をこえた場合、クローンは作成されません。
クローンされたとき
クローンが作成されると、「クローンされたとき」の下に組みこまれた命令が実行されます。
このクローンを削除する
クローンを消すブロックです。
また、プログラムを停止するとすべてのクローンが消えます。
ひとつずつ削除する場合は「このクローンを削除する」ブロックを使いましょう。
プログラムを停止する方法は下のとおりです。
- 緑のハタ
- 停止ボタン
- 「すべてを止める」ブロック(制御カテゴリ)
クローンを使った簡単なプログラム
クローンに関するブロックを使ったプログラムを作ってみました。
変数「色の効果」を使ってクローンのネコの色を変えています。
- 緑のハタをおされたとき、ネコのクローンを3つ作る。
- ハートのスプライトがおされたとき、ネコのクローンを作る。
- クローンされたとき、色を変えてどこかの場所へいく。
- ネコのクローンがおされたとき、そのクローンを削除する。
クローンとイベントブロック
クローンは、スプライトの「緑のハタが押されたとき」以外のイベントブロックに反応します。
例えばメッセージを送った場合、オリジナルとクローンどちらも「メッセージを受け取ったとき」ブロックの下に組みこまれた命令が実行されます。
変数を使い分ける
そもそも変数って何?という方は、下の記事からごらんください。
Scratchの変数には3つのタイプがあり、変数を作成する時にタイプを指定できます。
- すべてのスプライトで使えるグローバル変数
- このスプライトだけで使えるローカル変数
- 世界中で共有できるクラウド変数
今回は、グローバル変数とローカル変数について説明します。
クラウド変数については「【スクラッチ(Scratch)】Scratcherになってクラウド変数を使ってみよう!」でくわしく解説しています。
グローバル変数とローカル変数、それぞれのイメージは下の画像のような感じです。
ではプログラムを見ながら、ちがいをみていきましょう。
すべてのスプライト用(グローバル変数)
グローバル変数は、ステージとすべてのスプライトが使うことのできる変数です。
画像のプログラムにある変数「色の効果」はグローバル変数です。
クローンが作成されたときに40ずつ足され、アヒルのスプライトがおされたとき「色の効果」の値を表示します。
緑のハタをおしてクローンを3つ作った後、アヒルをおして「色の効果」を表示させたら、すべてのクローンで120が表示されました。
これは、すべてのスプライトが同じ変数「色の効果」を見ているからです。
このスプライトのみ(ローカル変数)
ローカル変数は、このスプライトだけが変えることができる変数です。
クローンを作ったとき、オリジナルのローカル変数の値が引きつがれますが、その後クローンのローカル変数を変えてもオリジナルのローカル変数が変わることはありません。
画像のプログラムにある変数「数字」はローカル変数です。
クローンが作成されたときに200~300までのランダムな数字を設定して、アヒルのスプライトがおされたとき「数字」の値を表示します。
緑のハタをおしてクローンを3つ作った後、アヒルをおして「数字」を表示させたらバラバラな数字が表示されました。
これは、それぞれのスプライトで持っている固有の変数「数字」を見ているからです。
オリジナルとクローンの動きを分ける
オリジナルとクローンの動きを分けたい場合、ローカル変数を使ってオリジナルまたはクローンのどちらか区別させる方法があります。
「緑のハタがおされたとき」は、一度すべてのクローンが削除されるためオリジナルのスプライトのみ実行されます。
また、「クローンされたとき」はクローンのみが実行されます。
この特性を利用して、ローカル変数(スプライト)に区別がつくような文字列や数字(オリジナル、クローン)を入れておいて、ローカル変数の値によってオリジナルとクローンの処理を分けるようにしています。
クローンを使って雪の結晶を降らせてみた
クローン機能を使って雪を降らせるプログラムを作ってみました。
プログラムは下の画像のとおりです。
オリジナルのスプライトはクローンを作る処理のみで動くことがないので、「隠す」ブロックを使って見えなくしました。
作成したクローンは「クローンされたとき」に「表示する」ブロックで表示させています。
「隠す」ブロックと「表示する」ブロックは見た目カテゴリにあります。
まとめ
クローンとは、プログラムを使ってスプライトをコピーすることです。
また、コピーされたスプライトのこともクローンと呼びます。
クローンを自由に使いこなせるようになるには大変そうだと感じるかもしれません。
まずは本などにのっているゲームをマネして作ってみて、どんなふうにプログラムが動くのか
トレース(命令を順番にたどって状態を確認すること)してみるといいと思います。