「ゆっくり落ちる星と、速く落ちる星を作りたいのに、速さを変えると全部が同じ動きになる」。Scratchのクローンでそんな場面に出会ったら、速さを入れている変数の設定を確かめてみましょう。
クローンごとに違う速さを持たせるには、変数を「このスプライトのみ」で作ります。クローンは、作られた瞬間のその変数の値を、それぞれ自分の値として引き継ぎます。この仕組みはScratch公式のクローン学習カード(英語・PDF)で説明されています。
ここでは、左右に並べた星を別々の速さで落とす「2体並走テスト」を作ります。得点や操作は加えず、「同じコードでも、自分の速さで動ける」ところを確かめる内容です。
速さは「全員で使う値」か「自分だけの値」か
同じ名前の変数を使っていても、その値を全員で共有するのか、一体ずつ持つのかで動きが変わります。
たとえば「ゲーム全体の残り時間」なら、全員が同じ数字を使う設計が考えられます。一方、「この星が落ちる速さ」は、星ごとに違う数字を持たせたいところです。
| 変数を作るときの選択 | 値の持ち方 | 今回の速さに使うと |
|---|---|---|
| すべてのスプライト用 | 元のスプライトとクローンが同じ値を共有する | 速さの値を書き換えると、ほかの星も書き換え後の値を使う |
| このスプライトのみ | 元のスプライトと各クローンが、それぞれ値を持つ | 左の星と右の星で、違う速さを保てる |
この区別は、公式カードの「Using Local Variables」「Using Global Variables」に基づきます。「このスプライトのみ」は、クローンでは使えないという意味ではありません。各クローンにも、自分専用の値が用意されます。
今回は、全体の速さ調整ではなく、一体ごとの速さを分けます。まずは専用の変数を一つ用意しましょう。
星のスプライトで「落ちる速さ」を作る
新しいプロジェクトに、星などの小さなスプライトを一つ用意します。星でなく、丸や葉っぱでも構いません。左右に並べたときに重ならない大きさにしてください。
- ステージではなく、動かす星のスプライトを選びます。
- 「変数」から「変数を作る」を開きます。
- 名前を「落ちる速さ」にします。
- 「このスプライトのみ」を選んで作成します。
すでに「すべてのスプライト用」の速さ変数を使っている作品では、いきなり元の変数を削除せず、別名の「落ちる速さ」を作って、このテストで使うブロックだけを置き換える方法にしましょう。ほかの処理まで同時に変えると、比較しにくくなります。
以下の数値は、違いを観察するために本記事で置く設定例です。推奨値や、子どもの理解度を測る基準ではありません。また、コードはScratchのブロックをつなぐ順番を文章で示したもので、そのまま貼り付けて実行するものではありません。
左右のクローンを作る前に、それぞれの速さを決める
星のコード欄に、次のまとまりを作ります。元の星は隠しておき、左側のクローンを作る前と、右側のクローンを作る前に「落ちる速さ」を設定します。
緑の旗が押されたとき
隠す
x座標を -80、y座標を 120 にする
落ちる速さを 2 にする
自分自身のクローンを作る
x座標を 80、y座標を 120 にする
落ちる速さを 6 にする
自分自身のクローンを作る
ここで注目するのは、「値を決める→クローンを作る」という並びです。
左のクローンを作る瞬間、元の星の「落ちる速さ」は2です。次に元の星の値を6にして、右のクローンを作ります。左は2を、右は6を持って出発する構成です。
「このスプライトのみ」の変数は、作成時点の値がクローンに引き継がれます。あとから元の星の値を変えても、先に作ったクローンの値まで連動して変わるわけではありません。詳しい仕組みは公式カードのローカル変数の説明で確認できます。
各クローンが「自分の速さ」を使って落ちるコード
続いて、同じ星のコード欄に、先ほどとは離して次のまとまりを作ります。字下げした部分は、「まで繰り返す」の内側に入れてください。
クローンされたとき
表示する
落ちる速さ と言う
y座標 < -140 まで繰り返す
y座標を(0 - 落ちる速さ)ずつ変える
0.05秒待つ
このクローンを削除する
「落ちる速さと言う」では、文字として「落ちる速さ」と入力するのではなく、変数の丸いブロックを「言う」の入力欄にはめ込みます。星が持つ数字を、吹き出しで確認するためです。
また、「0 – 落ちる速さ」は「演算」の引き算ブロックで作ります。左に0、右に変数を入れ、その全体を「y座標を○ずつ変える」にはめ込んでください。今回のコードでは、左の星は一回に2、右の星は一回に6だけ、下へ進む指定になります。
待つ時間は左右で同じにしています。違いをつける場所を「落ちる速さ」に絞るためです。
「クローンされたとき」から始める処理は、作られたクローン側で動かすものです。元の星とクローンの処理を分ける基本は、Scratch公式カードの「Clone 101」でも紹介されています。
お子さまに合う学び方診断
正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。
2体並走テストで、見る場所を絞る
緑の旗を押したら、まず吹き出しの数字を見ます。次に、左右の星がどちらも下へ進み、右が先に消えるかを確かめてください。
| 観察すること | このコードで目指す状態 | 違ったときに見る場所 |
|---|---|---|
| 左右の吹き出し | 左が2、右が6 | 変数の設定と、値を決めてから作る順番 |
| 下へ進む動き | 右の星が速い | 移動量に変数を入れているか |
| 右が消えたあとの左 | 左は自分の速さで落ち続ける | 別のコードで速さを書き換えていないか |
左右とも同じ速さなら、まず変数を作ったときの選択を確認します。共有変数のままでは、左用に2を入れても、そのあと右用に6を入れたときに、同じ共有の値が書き換わります。
一方、吹き出しは2と6なのに動きが同じなら、「y座標を変える」の中に固定の数字が残っていないかを見てください。変数に違う値が入っていることと、その値を移動に使っていることは、別の確認点です。
違いが確かめられたら、左右の速さを入れ替えてもう一度動かしてみましょう。今度は左が先に消えるなら、位置ではなく、渡した速さによって動きが変わることを比較できます。
自分の作品に戻すときは、速さを決める場所を一つにする
星、雪、落ち葉などを繰り返し出す作品へ応用するなら、今回の固定値を、作りたい速さの範囲に置き換えます。ただし最初は、クローン作成の直前に速さを決める構成を保ってください。
たとえば、作成前に速さを決めたうえで、「クローンされたとき」の直下でも全員の速さを同じ数字に設定すると、せっかく引き継いだ違いを上書きしてしまいます。
「速さを決めるのは元の星」「決まった速さで動くのは各クローン」と役割を分けておくと、今回の仕組みを作品に移しやすくなります。
出現を繰り返す部分から作りたい場合は、クローンの出現・退場を扱う既存記事を参照してください。本記事の完成範囲は、数を増やすことではなく、一体ずつ異なる速さを保持することです。
よくある質問(FAQ)
「このスプライトのみ」なのに、クローンも使えるのですか?
使えます。各クローンが、自分用の値を持つ仕組みです。同じ変数名でも全員が同じ一つの値を見ているわけではありません。公式のローカル変数の説明でも、スプライトまたはクローンごとに個別の値を持つとされています。
クローンを作ったあとに、元の星の速さを変えてもよいですか?
今回の「このスプライトのみ」の変数なら、先に作ったクローンは自分の値を保ちます。右の星のために元の値を6へ変えても、左の星は2のまま動く、というのが並走テストの確認点です。
「クローンされたとき」で速さを決める方法は使えませんか?
その場所で各クローンの速さを設定する構成も考えられます。ただし今回は、作る前に決めた値を引き継ぐ方法に統一しています。まず一つの構成で動きを確かめ、設定する場所を混在させないようにしましょう。
速さの吹き出しは、完成後も必要ですか?
必要ありません。今回は各クローンが持つ値を見るために入れています。数字と動きが対応していると確かめられたら、「落ちる速さと言う」を外して、もう一度実行してください。
幼児が変数を理解してからでないと試せませんか?
このテストを試す前提として、変数の説明を暗記する必要はありません。操作が難しければ、大人がブロックを置き、子どもは「どちらを速くしたいか」を選ぶ参加方法もあります。負担が大きければ、完成した動きを見比べるところまでにして構いません。
作品に合わせて、個別指導で次の一歩を相談する
CotoMiraiでは、年齢・興味・理解度に合わせたプログラミングの個別指導を行っています。指導方針はCotoMirai公式サイトで案内しています。
今回なら、「クローンは作れるが、全員の速さがそろってしまう」「左右のテストでは分けられたので、自分の落ち葉の作品にも使いたい」と、試したい場面を具体的に伝えてみてください。体験で扱える内容は、申し込み時にご確認ください。
南青山周辺で、お子さまの作りたいものに合わせた学びを探している方は、無料体験をご活用ください。
参考にした情報
- Scratch公式「Advanced Topics: Clones」学習カード
- CotoMirai「子どものScratchゲームで風船を次々に出すには?クローンの出現・退場設計シート」
- CotoMirai公式サイト
関連する記事
お子さまに合う学び方診断
正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。