Scratchでゲームなどを作るときに、クローンを使ってスプライトの複製(コピー)を作る場面はわりと多いと思います。
クローンは単純に見た目のコピーも作れますが、変数をクローンごとに持たせることもできます。
クローンごとに変数を持たせることができると、特定のクローンだけにある値を持たせたり、特別な動きをさせたり、見た目を変化させたりすることが出来るようになります。
今回は、クローンごとの変数の持たせ方とその変数を使って1つ1つのクローンを識別する方法などをご紹介します。
この記事を読んでいただくと、クローンごとの変数のつくり方とクローンを識別する方法、外部から特定のクローンの情報にアクセスするための方法が分かります。
クローン情報へのアクセスについて
クローンを使うと、たった1つのスプライトで複数のスプライトを用意したような効果が得られます。
それぞれのクローンは、変数を作るときに「このスプライトのみ」にチェックを入れることで個別に値を持つことができるようになります。
ただし、このような個別の値をその他のスプライトやクローンで利用する場合は、リストにクローンごとの値を保持しておくなどの工夫が必要になります。
クローン内のみで情報を扱う場合
そのクローンの中でしか利用しない情報を扱うときは、その他のクローンと情報を共有する工夫は不要なので、比較的シンプルに実現できます。
プライベート変数を利用する
クローンごとに使う変数を作成するときには、「このスプライトのみ」をチェックしておきます。こうすると、この変数はクローンごとに別のものとして扱われるようになります。
そのため、クローンの外(他のスプライトなど)からはこの変数の値を読み書きすることはできません (このような変数をプライベート変数といいます)。
この変数を利用してクローンごとに異なるID番号をつけておくと、それぞれのクローンに別の動作をさせることも出来るようになります(もしID番号=○○番のとき~)。
使い方のコツとしては、クローンを作るブロックの直前でこの変数にクローンごとの別々の値を入れておきます。
他のスプライトやクローンから情報を読み書きする場合
クローンごとの情報をその他のクローンで利用する場合は、少し工夫が必要です。
リストを利用する
クローンごとに持っている変数はプライベート変数のため、その他のスプライトやクローンからは読み書きすることができません。
クローンごとの個別の情報を他のスプライトやクローンから読み書きできるようにするためには、その情報をリストに格納しておくことで実現できます。
使い方のコツとしては、リストの要素番号をクローンのID番号と一致させてリストを作り、値を格納します。そうすることで格納した値がそのクローンが持っている値とすることができます。
なお、クローンごとの変数をその他のスクリプトから扱う必要がない場合は、今回説明したリストは作らなくてOKです。
これらのテクニックは、次のような場面で活用できます。
応用例
- 1つのスプライトから、複数のボタンを生成する
- 1つのスプライトから、さまざまな種類の大量の敵を発生させる
- 複雑なパーティクル効果
- 1つのスプライトで、雲・爆発などさまざまな効果を発生させる
- 数多くの建物をマップに建築する
- 1つのスプライトから、すべてのキャラクターの弾丸を作成する
スクリプトの作り方
完成した動き
クローンごとに「クローン番号」と「クリックされた回数」の2つの変数を持たせて、クリックされた回数をリストに格納しています。
リストの要素番号とクローン番号は一致させています。
(すべてのスプライト用で作成した)リストに値をいれておけば、外部(それ以外のスプライト)から読み書き可能になります。
完成したスクリプト
完成したスクリプトの全体です。スプライトはネコのスプライト1つだけです。
- クローン番号:このスプライトのみ
- クリックされた回数:このスプライトのみ
- クリック総数:すべてのスプライト用
スクリプトの説明
プログラムを作っていく中でポイントとなる部分を説明します。
ポイント①:クローンごとの変数とリストをつくる
【クローン番号】変数
「このスプライトのみ」にチェックを入れて「クローン番号」変数をつくります。
この変数は、クローンごとに1から順番に番号を格納します。
【クリックされた回数】変数
「このスプライトのみ」にチェックを入れて「クリックされた回数」変数をつくります。
この変数は、それぞれのクローンがクリックされた回数をカウントして値を格納します。
【クリック総数】リスト
「すべてのスプライト用」にチェックを入れて「クリック総数」リストをつくります。
このリストは、「クローン番号」を要素番号にして「クリックされた回数」を値として格納します。
「すべてのスプライト用」とすることで、どのキャラクターからでも読み書きできるリストになります。
ポイント②:クローンをつくる直前にクローン番号を与える
「クローン番号」変数に1~12までの値を順番に入れます。
「クローン番号」変数に入れる値を変えたらすぐに「自分自身のクローンを作る」ブロックがあるので、このタイミングで別々の値を持った状態でクローンが作られます。
クローン別に値を持たせる場合は、下の図のようにクローンをつくる直前に変数に個別の値を入れるようにします。
ポイント③:特定のクローンを識別する条件を設定する
クローンを識別するには、そのクローンを1つに特定する条件を決めなければいけません。
今回の例では、マウスクリックでクローンを選択するようにしているので「マウスのポインターに触れた」かつ「マウスが押された」という2つの条件を組み合わせてクローンを特定しています。
条件はこれ以外でもクローンを特定できれば好きなように設定してOKです。
プログラムの中身としては、あるクローンをマウスクリックすると「クローン番号」と「クリックされた回数」をしゃべるようにしています。
さらに、クリックしたクローン番号と一致するリスト要素のところにクリックされた回数を入れています。
ここまでのポイントを押さえてスクリプトを作成したら、1つ1つのクローンを識別するプログラムは完成です!
失敗しやすいポイント
ここでは、よくある失敗パターンについて説明します。
クローンを特定する条件が不足したケース
上で説明したスクリプトの「もし~なら」ブロックの条件から「マウスポインター触れた」ブロックを取りのぞいてみました。どうなるでしょうか?
1つのクローンしかクリックしていないのに、すべてのクローンが同じ動きしてしまいました。
この理由としては、前提としてまず、すべてのクローンが「ずっと」ブロックを実行中であることです。その時に単にマウスでクリックすると、「マウスが押された」という条件がすべてのクローンに当てはまってしまったためです。
このようにクローンを特定する条件をきちんと考えておかないと失敗の元になるので注意しましょう。
応用編
パーティクル効果をつかった作品例
ここでは、クローンを使ってパーティクル効果の1つである「火花」を表現してみます。
パーティクル効果とは、炎、爆発、火花、雲、霧などを小さな粒(粒子:パーティクル)が集まったものとみなして、それらの粒子の動きを再現するグラフィック効果のことです。
クローンの中で変数の値を変化させていて出来るだけ自然な動きを再現しています。
※スペースキーを押している間、火花を散らせます。
まとめ
さいごに、クローンごとの変数のつくり方とクローンを識別する方法、外部から特定のクローン情報にアクセスするためのポイントをまとめます。
- ポイント①:クローンごとの変数とリストをつくる
- ポイント②:クローンをつくる直前にクローン番号を与える
- ポイント③:特定のクローンを識別する条件を設定する
クローンを使いこなせるようになると、複雑なゲームなども簡単に作れるようになります。
最初は難しいと思うかもしれませんが、一度理解してしまえばあとはラクなので、色々なお手本(Scratchサイト上の公開作品)を真似してみて早めに慣れてしまいましょう。
どうでしたか?上手くできたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)