※ 当ページには【広告/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選
まとめ
今回はクローンを使うスプライト側から、別のスプライトをクローンを作る方法を解説しました。このテクニックを使うと、クローンするロジックとスプライトを動かすロジックが分離できるようになりますので、より効率的なワンランク上のプログラミングが習得できるようになるでしょう。