クローンが使えるようになると色々なゲームが作れるようになります。ぜひクローンの使い方をマスターしましょう!
クローンには、次の3つのポイントがあります。ひとつずつ丁寧に解説していきます。
同じスプライトを画面に複数表示させたいときに使う
クローンを実行すると、クローンしたスプライトと同じものが画面上に表示されます。
「クローン」というボタンを押すと、「ネコ」のスプライトがクローンされるように作りました。コードは次のようになります。
「クローン」ボタンのコード
上図のように別のスプライトのクローンを作ることもできますし、自分自身のクローンを作ることもできます。
「ネコ」のスプライトのコード
クローンは同じ場所に作られるので、下記のようにクローンされたら「どこかの場所へ行く」ようにしました。こうすることでクローンが作られたことが分かりやすくなります。
まとめ:同じスプライトを画面に複数表示させたいときに使う
クローンを利用すれば、敵キャラクターをたくさん増やしたり、アイテムをいくつも画面上に並べたりすることができます。
クローンは同じスクリプトを実行する
「ネコ」のスプライトのコード
「ネコ」のスプライトに、下記のようなコードを追加しました。「ネコ」のスプライトが押されたときに「x座標」を2秒言ったり、上や下の矢印キーを押すとその向きに移動するようなコードです。
実行結果
「ネコ」のクローンを複数作って、このコードを実行してみました。
動画の動きを確認しましたか?すべてのクローンが上に移動したり、下に移動したりしていますね。
まとめ:クローンは同じスクリプトを実行する
コードは、クローンごとに複数作成する必要はありません。みなさんが今までやってきたように、スプライトに対してコードを作成していけばいいのです。
クローンごとに変数を持つことができる
概要
「クローンごとに変数を持つことができる」とはどういうことでしょうか。
実は、先ほどの「② クローンは同じスクリプトを実行する」で使っています。答えは、ネコの「x座標」です。「x座標」は、ネコの位置を決める変数です。クローンごとに「x座標」を持つことができるので、色々な場所にクローンを置くことができるのです。
もし、「x座標」がクローン全体で共有する変数だったとします。そうすると、あるクローンの「x座標」を変えたときにその他の全てのクローンも同じ「x座標」に移動することになります。
このように、クローンごとに値を持つことができる変数のことを「インスタンス変数」と呼びます。一方で、スプライト全体で共有して値を持つ変数のことを「グローバル変数」と呼びます。
スクラッチでクローンを使ったゲームを作る際に、この二種類の変数を使い分ける場面がでてきます。一緒に確認してみましょう。
変数の作り方
作成したクローンの総数を数えたいとき、クローンごとにその変数を持つ必要はありません。スプライト全体で共有したほうがいいですね。下図の赤枠のように「すべてのスプライト用」にチェックを入れて変数を作成します。こうすることで、「クローンの数」という変数はグローバル変数として使えるようになります。
次に、クローンを作っていった順に、クローンに番号をつけたいこともあります。この場合は下図のように、「このスプライトのみ」にチェックを入れて変数を作成します。これで、「番号」はインスタンス変数として使えるようになり、クローンごとに異な番号をつけることができます。
「ネコ」のスプライトのコード
ネコがクローンされたとき、「クローンの数」を1ずつ増やします。そして、「番号」の中身を「クローンの数」にします。こうすることで、ネコがクローンされる度にクローンの数が増えていき、ネコのクローンに「番号」を1から順に割り当てることができます。
実行結果
「番号」は、クローンごとにもつことができるインスタンス変数として作成しています。クローンごとに「番号」が割り当てられており、クローン自身の「番号」を表示します。
一方で、「クローンの数」はグローバル変数です。グローバル変数は、スプライト全体で共有して使う変数です。そのため、「クローンの数」を表示させると、どのクローンにおいても同じ値を表示していることがわかります。
まとめ:クローンごとに変数を持つことができる
インスタンス変数とグローバル変数の違いはわかったでしょうか。どちらがいい、どちらが悪い、ということではなく、その変数の使われ方に応じて適切な変数の種類を使えるようになることが大事です。
どちらにするか迷った場合はなるべくインスタンス変数(「このスプライトのみ」にチェックを入れて変数を作成する)を使うようにしましょう。理由が知りたい方は、「オブジェクト指向 カプセル化」といったキーワードでネット検索してみてください。
コメント