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















