【Scratch入門〜中級編】他のスプライトからクローンをして使う方法


※ 当ページには【広告/PR】を含む場合があります。
2020/10/02
2022/08/22
【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法
【Scratch入門〜中級編】十字キーのスプライトを使ってタッチパネルからゲームを操作する方法



Scratchにおけるクローンのちょっと進んだ使い方として、スプライトが
「自分自身をクローン(複製)する」 を利用したプログラミングがほとんどですが、 「他のスプライト」をクローン として扱うこともできます。
自分以外のスプライトをクローンとして扱えることで、より複雑なゲーム性を創りだすことが可能になります。
今回は他のスプライトのクローンでどのようなことができるのか、簡単な実例を挙げながら解説してみます。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

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



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

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

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratch入門】スプライト・クローンの基本的な利用方法

もっとも重要な機能である「クローン」の基本的な使い方と注意点を解説します。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法

Scratchの中級者向けのテクニックとして、クローンの特殊な使い方を解説します。



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

合同会社タコスキングダム|蛸壺の技術ブログ


他のスプライトのクローンを呼び出すことがどんな時に便利かというと、例えば呼び出し元のスプライトは固定で動かないけれども、クローンして使うスプライトは移動して動き回るようなプログラムを作る場合などがあります。
今回解説するプログラムでいうと、たこのスプライトが中央の緑のボタンに触れたとき、ボタンのスプライトはさかなのスプライトをクローンして画面に追加しています。

合同会社タコスキングダム|蛸壺の技術ブログ


プログラミングの中身を見たとき、さかなが泳ぐロジックと、さかなをクローンするロジックが上手く分離されていることに注目してください。
また複数のスプライトのクローンを作成するイベントがある場合にも、1つのスプライトが司令塔となってクローンを管理する・まとめると、プログラミングの見通しがよりスッキリとすると思います。
他のスプライトのクローンを効率よく管理できるようになれば、より複雑なゲームも作りやすくなりますので、今のうちに覚えておいて損はないテクニックです。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

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



早速ブロックプログラミングで、他のスプライトを用いたクローンの作成の方法をみていきましょう。
以前
こちらの記事・スプライト・クローンの利用法〜中級者編 で、主に 自分自身 のクローンを作成して使う時のポイントを解説していました。
この記事の中で
自分自身 のクローンを作る際には、 ローカル変数 を使って各クローンに裏番号を付けると良いという内容でお話しましたが、今回のように 他のスプライト をクローンして利用するプログラムでは、2つのスプライトの間でローカル変数の値が共通で使えませんので、このローカル変数を使った裏番号からの操作はできません。
というわけで、クローンする側される側の二つのスプライトの間で共通の値を使えるように、グローバル変数(普通の変数)を利用して情報を橋渡しするやり方をします。
当然ながらグローバル変数は、全てのスプライトからも丸見えになってしまうので、何かの不手際で関係のないスプライトで使われて値を変更されてしまうと、最悪プログラムが思うように動かなくなってしまう恐れがあります。
Scratchのプログラミングにおいて、グローバル変数の絡むバグはとても分かりにくいので、分かりやすい名前を付けるなど、使う際にはひと工夫入れておきましょう。

スプライトの準備



まずは素材(スプライト・変数)作りからやりましょう。
今回のスプライトは
たこ / ボタン / さかな の3つで、各コスチュームは以下の図のように設定しています。

合同会社タコスキングダム|蛸壺の技術ブログ

たこのスプライト



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

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratch入門】コスチュームを変えてスプライトのアニメーション効果を付ける

Scratchでスプライトを移動させる時にコスチューム番号をずらしてアニメーションで動かす方法を解説します。



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

合同会社タコスキングダム|蛸壺の技術ブログ


まずプログラミングブロックを管理しやすいように
さかなにふれたボタンにふれた の2つの定義ブロックを準備します。
このブロックには、
調べる から 〇〇に触れた を使って、スプライト同士が衝突したときに、 さかなさわったを送る もしくは ボタンさわったを送る のメッセージイベントが発生するようにしておきます。
この定義ブロックをたこの動きを行っている処理ループの中に登録したらたこのスプライト側の準備が完了です。

ボタンのスプライト



こちらはたこが触れてきたら、その都度、さかなのスプライトのクローンを増やす処理を行います。
まずはゲーム開始時の初期化の処理を作ります。
他のスプライトをクローンするときの橋渡し役のグローバル変数
ばんごう を追加します。

合同会社タコスキングダム|蛸壺の技術ブログ
🚩 が押されたときブロックで ばんごう をゼロにリセットし、とりあえず10回分のさかなのスプライトのクローンを作成と同時に ばんごう もカウントアップさせておきます。

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ

さかなのスプライト



まずは初期化処理ですが、グローバル変数では常に書き換わるので、先ほどのグローバル変数
ばんごう ではクローンに裏番号を付けることはできません。
そのためクローンに裏番号を持たせるためのローカル変数
ばんごう_ を追加しておきましょう。

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


まずグローバル変数
ばんごう からその時の値をローカル変数 ばんごう_ に写し取って、クローンの裏番号として利用しています。 これでクローンごとにイベントなどの処理に利用することができるようになります。
また、スプライトの動きなどを定義して各クローンにも適用させる際にもやはり
クローンされたとき の中に定義ブロックを組み込む必要があります。 こうしなければ、クローンは動くことはないので注意しましょう。
最後にたこがさかなのスプライトに触ったときに送られる
さかなさわった イベントのブロックを完成させます。
たこがどのクローンに衝突したのかを裏番号で判定するテクニックについては、
以前の記事 で詳しくやりましたのでここでの説明は省略します。

合同会社タコスキングダム|蛸壺の技術ブログ


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


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

まとめ



今回はクローンを使うスプライト側から、別のスプライトをクローンを作る方法を解説しました。
このテクニックを使うと、クローンするロジックとスプライトを動かすロジックが分離できるようになりますので、より効率的なワンランク上のプログラミングが習得できるようになるでしょう。