【スクラッチ】変数「このスプライトのみ」の使い方

ブロックの応用テクニック
Scratch星人
Scratch星人

スクラッチで「新しい変数」を作る場合、「すべてのスプライト用」か「このスプライトのみ」のどちらかを選ぶ必要があります。

Scratch星人
Scratch星人

以前、ブロックの基本、変数ブロックの使い方の記事では「このスプライトのみ」の変数は複雑なゲームを作れるようになってから利用しても遅くありません。とお伝えしました。

Scratch星人
Scratch星人

この記事では「ふたつの変数の違い」と「このスプライトのみ」の変数について、少し、突っ込んだ解説をしようと思います。

難しいと感じるかもしれませんが、最後まで読んでマスターしてください!

ふたつの変数について

まず、なぜ、変数がふたつあるのかですが、英語でコードを書くようなプログラミングの場合にも、「グローバル変数」「ローカル変数」という呼び方で、ふたつの変数が存在しています。

それらをスクラッチでは以下の呼び方で使い分けています。

  • すべてのスプライト用:←グローバル変数のこと
  • このスプライトのみ:←ローカル変数のこと

「グローバル」や「ローカル」という名前は、スクラッチをやっているうちは、無理に覚えなくても大丈夫ですが、将来プログラミングのお仕事をしたいと思っているあなたは、今後、間違いなく耳にするものですので、今のうちから頭の片隅に入れておくといいかもしれません。

変数を使い比べてみよう

言葉で解説するよりも、実際に使ってみた方が、違いが分かると思うので、一緒に以下のコードを作成してみて下さい。

ネコのコード

変数を作成する際に「HP→すべてのスプライト用」として「hp→このスプライトのみ」としてみてください。

ボールのコード

少し面倒なコードになっていますが、後から「ネコ2」と「ネコ3」を追加したいので、このようにしています。

同じように作成して、実行してみて下さい。

右から左に、一定の間隔でボールが飛んできて、ネコに当たるたびに「HP」と「hp」の数字が、同じように1ずつ減っていくのが確認できたでしょうか?

これだけでは、ふたつの変数にどのような違いがあるのか、まだ全く分かりません・・。

ネコ2のコード

ネコ1のスプライトを複製して、色を変えるなどして、ネコ2を作成してみて下さい。

気付いたでしょうか?
ネコ1で作成したHPは表示されていますが、hpは表示されません。

hpは「このスプライトのみ」で作成したので、ネコ1にしか表示されないのです。

では、どうすればいいかと言うと、ネコ2でもう一度「このスプライトのみ」の「hp」という変数を作ってあげればいいのです。

「このスプライトのみ」の変数を作成すると以下の画像のように「スプライト名:変数名 変数の値」という表示になるので、覚えておきましょう!

変数を作ることが出来たら、以下のようなコードを作成して実行してみてください。

スプライトを2つにしたことで、変数の動きが少しおかしくなってきましたね。

「ネコ1のhp」と「ネコ2のhp」はボールに当たるたびに1ずつ減っていくので正しく動作していますが「すべてのスプライト用のHP」は2人のダメージを合わせた数字で減っていってしまいます。

別々のスプライトのhpを管理するような場合に「このスプライトのみ」の変数は便利です。

・・・しかし!!
ちょっと待ってください。

「すべてのスプライト用」の変数を「ネコ1のHP」「ネコ2のHP」「ネコ3のHP」というように、3つ用意することで「このスプライトのみのhp」と同じような管理が出来てしまうのです。

ネコ1とネコ2のコード修正

ネコ1のコード
ネコ2のコード

ネコ3のコード

コードを実行してみると「HP」と「hp」どちらも、同じように減っていくのが確認出来ると思います。

このままでは「このスプライトのみ」の変数なんて必要ないじゃん。と思ってしまいますよね?

ネコのクローンを作成して確認してみる

スクラッチでは「クローン」を作成したときに「このスプライトのみ」の変数の大切さが理解できるようになります。

それでは、今開いているプロジェクトをコピーして、ネコ2とネコ3を削除してください。
(メニューのファイル→コピーを保存)

ネコ1のコード

このようなコードを作成してみてください。
(ボールのコードは先ほどと同じです)

繰り返しになりますが「ネコ1のHP→すべてのスプライト用」で「hp→このスプライトのみ」という事を忘れないでください。

実行してみると、3匹のネコがそれぞれ、自分のダメージに応じたhpの数字を言うと思います。

Scratch星人
Scratch星人

言い換えると、クローンされたスプライトひとつひとつが、別々の変数の値を持つことが出来たのです。(少し難しいですね・・・)

では「すべてのスプライト用」の変数で同じことが出来ないか、試してみましょう。

先ほど作成したコードの「ずっと」の部分を以下のように変更してみて下さい。

実行してみると、3匹とも「ネコ1のHP」の数字を言ってはいますが、それぞれのHPではなく3匹のダメージを合わせたHPを言っているのです。

まとめ

少し難しい内容になってしまいましたが「ふたつの変数の違い」と「このスプライトのみの変数の使い方」について解説しました。

スクラッチでは「すべてのスプライト用」の変数を使って大抵のものは作成出来てしまうと思います。

しかし、お仕事のプログラミングの世界では、グローバル変数(すべてのスプライト用)は、トラブル(エラー)のもとになったりもするため、正しい場所のみに使い、ローカル変数(このスプライトのみ)をなるべく使うようにしようと言われたりします。

プロジェクトが複雑になるほど、どちらの変数を使うかは大切になります。

難しい使い分けなどは、徐々に勉強して覚えていけばいいと思いますが、この記事を最後まで読んでくれたあなたは「このスプライトのみ」の変数の大切さを分かってくれたと思っています。

自分の頭の中にある「作りたいもの」を形にするために、一歩一歩、楽しみながら頑張っていきましょう(*^▽^*)

コメント

タイトルとURLをコピーしました