【スクラッチ】クローンの作り方の基本編

スクラッチの中でよく使われるクローンですが
クローンを作成するスクリプトとスプライトの動きについて
おさらいをしていきましょう。

自分自身のクローンの作り方

一般的なクローンの作り方

クローンを使う場合はオリジナルのクローンを隠して
クローンだけを表示して使う事が一般的です。

一般的なクローン作製のスクリプト

画像のように3匹のネコのクローンを並べて表示する場合、

”旗が押されたとき”のブロックの下で”隠す”のブロックをいれてオリジナルのスプライトを消し、
クローン数の3回だけ”自分自身のクローンを作る”を繰り返し、クローンが重ならないように、オリジナルの位置を変えます。
”クローンされたとき”のブロックの下で、クローンされたスプライトを”表示”します。

理解をしておいて欲しいのは、

クローンの基本

クローンが作られる場所は、元になるスプライトが存在する場所となる

クローンの元になるスプライトが”隠す”で見えなくても、”クローンを作る”の命令があるとクローンも作る

オリジナルのスクリプトでクローンを作るとオリジナルのクローンができる

クローンのスクリプトでクローンを作るとクローンのクローンができる

イベントのスクリプトでクローンを作ると、オリジナルとクローンの両方のクローンができる(隠しているクローンがある時は画面がクローンで一杯になるよ


オリジナルのネコを隠さないでゆっくりと移動させながら、
クローンを3匹作る様子を下の動画で説明します。

 

クローンをいくつ、どこに作る

クローンを作る数

クローンを作る数は、”○○のクローンを作る”を
”ずっと””○○回繰り返す”のブロックで囲みます。

但し、”ずっと”のブロックで囲む場合は、
”○○秒待つ”というブロックを入れるのが普通です。
そうでないと、スゴイ数のクローンが出て、プログラムが動かなくなりますよ。

○○秒○○回のところに”〇から〇までの乱数”を入れる事も良くあります。

クローン数の指定ブロック

クローンを出現させる場所を指定する方法は、

予め決まった場所にクローンを出現させたい場合は
その場所にオリジナルを移動させてからクローンを作り
”表示”させます。

シューティングゲームの弾などをクローンする場合は、
クローンされたあとに”○○へ行く” というブロックで
弾を発射するスプライトの位置を指定します。

敵キャラは右端から左に移動してきて欲しい場合は
X座標を240、Y座標は乱数としたら良いですね。

クローンの出現場所

オリジナルとクローンのスプライトへの命令

先ほどの動画でも説明をしたように、”クローンを作る”のブロックを
どこに置くかで、どのスプライトのクローンがどんな風にできるかが変わってきます。

基本を理解してもらった上で、ちょっと違うクローンの作り方をご紹介します。

”○○のクローンを作る”のブロック

他スプライトでクローンを作る

クローンを作る方法は、”自分自身のクローン”を作るだけでなく、
”別スプライトのクローンを作る”ことが出来ます。

このケースはAbbyというスプライトのスクリプトに、
”スプライト1(ネコ)のクローンを作る”というブロックをいれています。

はてなさんはてなさん

どうして、そうするのでしょうか?

 

そら先生そら先生

ネコのオリジナルだけをクローンしたい場合は、その方が簡単かもしれないね

”自分自身のクローンを作る”のブロックが、イベント(”旗が押されたとき”のブロックは例外)
のブロックの下に置かれると、Abbyの周りにいるクローンのクローンができてしまうので、
たちまち画面はクローンネコでいっぱいになってしまいます

イベントのブロック

そのような状況にならないように、クローンを作るブロックをどのスプライトに入れるかを
考えてみてください。

 

変数でクローンのクローンを作るのを禁止する

ここまで、クローンをどうやって作るのか、または大量のクローンを作りださないための、
基本的なスクリプトの組み方を説明をしてきました。

そら先生そら先生

残念ながら、それだけではダメな時もあるんだよね。

実は基本通りにやっても、プログラムの順番や処理時間の関係なのか、
どうも思い通りの結果にならないことがあります。

そんな時は、それぞれのスプライトにクローンを”する” ”しない” を
グローバル変数で区別をしておくのが良い
です。

クローン有無を変数で区別するスクリプト
例えば”プライベート変数”(変数をつくる時に「このスプライトのみ」の方にチェックをいれる)で
”クローン”を ”yes” と “no” に区別して、”yes” のスプライトの場合にはクローンを作るようにしてあります。
上の画像の例では、オリジナルのスプライトの変数は”yes”にしていて
クローンされたスプライトの変数は”no”とすることで
オリジナルのスプライトのクローンしか作られないようにしています。
そのため、上向き矢印を押しても、
オリジナルのスプライトのクローンだけが出来るように変わりました。