【Scratch3基礎講座】 他のスプライトからクローンをして使う方法


2020/10/02

クローンの基本的な使い方は、
自分自身をクローンするを利用したプログラミングがほとんどですが、他のスプライトをクローンとして扱うこともできます。

自分以外のスプライトをクローンとして扱えることで、より複雑なゲーム性を創りだすことが可能になります。

今回は他のスプライトのクローンでどのようなことができるのか、簡単な実例を挙げながら解説してみます。


👇プログラミング教室をお探しの人必見!

👇スクラッチの教科書をお探しの人必見!

他のスプライトをクローンするメリット

まずは実際のプログラム例をみてみましょう。

スクラッチのウェブサイトのここにプログラムをおきましたので実際の中身を見ながらブロックコードの使い方を解説してみます。なお、下がこのゲームのデモです。

スプライトでクローンを利用する時、ほとんどの場合には
自分自身のクローンで事足りますので少し存在感の薄いかもしれませんが、他のスプライトもクローンすることができます。

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

他のスプライトのクローンを呼び出すことがどんな時に便利かというと、例えば呼び出し元のスプライトは固定で動かないけれども、クローンして使うスプライトは移動して動き回るようなプログラムを作る場合などがあります。

今回解説するプログラムでいうと、たこのスプライトが中央の緑のボタンに触れたとき、ボタンのスプライトはさかなのスプライトをクローンして画面に追加しています。

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

プログラミングの中身を見たとき、さかなが泳ぐロジックと、さかなをクローンするロジックが上手く分離されていることに注目してください。

また複数のスプライトのクローンを作成するイベントがある場合にも、1つのスプライトが司令塔となってクローンを管理する・まとめると、プログラミングの見通しがよりスッキリとすると思います。

他のスプライトのクローンを効率よく管理できるようになれば、より複雑なゲームも作りやすくなりますので、今のうちに覚えておいて損はないテクニックです。


他のスプライトをクローンする手順

早速ブロックプログラミングで、他のスプライトを用いたクローンの作成の方法をみていきましょう。

以前
こちらの記事・スプライト・クローンの利用法〜中級者編で、主に自分自身のクローンを作成して使う時のポイントを解説していました。

この記事の中で
自分自身のクローンを作る際には、ローカル変数を使って各クローンに裏番号を付けると良いという内容でお話しましたが、今回のように他のスプライトをクローンして利用するプログラムでは、2つのスプライトの間でローカル変数の値が共通で使えませんので、このローカル変数を使った裏番号からの操作はできません。

というわけで、クローンする側される側の二つのスプライトの間で共通の値を使えるように、グローバル変数(普通の変数)を利用して情報を橋渡しするやり方をします。

当然ながらグローバル変数は、全てのスプライトからも丸見えになってしまうので、何かの不手際で関係のないスプライトで使われて値を変更されてしまうと、最悪プログラムが思うように動かなくなってしまう恐れがあります。スクラッチのプログラミングにおいて、グローバル変数の絡むバグはとても分かりにくいので、分かりやすい名前を付けるなど、使う際にはひと工夫入れておきましょう。

スプライトの準備

まずは素材(スプライト・変数)作りからやりましょう。

今回のスプライトは
たこ/ボタン/さかなの3つで、各コスチュームは以下の図のように設定しています。

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

たこのスプライト

まずは泳ぐような動きをもたせたたこのスプライトは、当ブログの記事で使いまわしてきたものですが、作り方自体はこちらの記事で紹介しています。興味があればそちらも参照してください。

今回はこのたこのスプライトが、他のスプライト(とそのクローン)に衝突する際のイベントの部分のみ解説します。

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

まずプログラミングブロックを管理しやすいように
さかなにふれたボタンにふれたの2つの定義ブロックを準備します。

このブロックには、
調べるから〇〇に触れたを使って、スプライト同士が衝突したときに、さかなさわったを送るもしくはボタンさわったを送るのメッセージイベントが発生するようにしておきます。

この定義ブロックをたこの動きを行っている処理ループの中に登録したらたこのスプライト側の準備が完了です。

ボタンのスプライト

こちらはたこが触れてきたら、その都度、さかなのスプライトのクローンを増やす処理を行います。

まずはゲーム開始時の初期化の処理を作ります。

他のスプライトをクローンするときの橋渡し役のグローバル変数
ばんごうを追加します。

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

🚩が押されたときブロックでばんごうをゼロにリセットし、とりあえず10回分のさかなのスプライトのクローンを作成と同時にばんごうもカウントアップさせておきます。

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

次にたこがボタンに触ったときに送られてくる
ボタンさわったイベントの処理も同じように作ります。

ボタン側がたこに触れている状態で、
ばんごうをゼロにリセットし、先ほどと同じように10回分のさかなのスプライトをクローン+ばんごうをカウントアップさせています。

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

さかなのスプライト

まずは初期化処理ですが、グローバル変数では常に書き換わるので、先ほどのグローバル変数ばんごうではクローンに裏番号を付けることはできません。

そのためクローンに裏番号を持たせるためのローカル変数
ばんごう_を追加しておきましょう。

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

他のスプライトをクローンする場合にも各クローンを思い通りの処理をさせようとすると、もっとも重要なプログラミングのポイントは
クローンされたときブロックの中身が適切に組まれているかです。

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

まずグローバル変数
ばんごうからその時の値をローカル変数ばんごう_に写し取って、クローンの裏番号として利用しています。これでクローンごとにイベントなどの処理に利用することができるようになります。

また、スプライトの動きなどを定義して各クローンにも適用させる際にもやはり
クローンされたときの中に定義ブロックを組み込む必要があります。こうしなければ、クローンは動くことはないので注意しましょう。

最後にたこがさかなのスプライトに触ったときに送られる
さかなさわったイベントのブロックを完成させます。

たこがどのクローンに衝突したのかを裏番号で判定するテクニックについては、
以前の記事で詳しくやりましたのでここでの説明は省略します。

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

ここでは、たこが触ったときのクローンが消滅するだけでは少々つまらないので、
さかなはんべつという定義ブロックを用意して、各クローンが消滅する前に設定されいる裏番号を表示させるようにさせてみました。


👇プログラミング教室をお探しの人必見!

👇スクラッチの教科書をお探しの人必見!

まとめ

今回はクローンを使うスプライト側から、別のスプライトをクローンを作る方法を解説しました。

このテクニックを使うと、クローンするロジックとスプライトを動かすロジックが分離できるようになりますので、より効率的なワンランク上のプログラミングが習得できるようになるでしょう。