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


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

この記事では「ふたつの変数の違い」と「このスプライトのみ」の変数について、少し、突っ込んだ解説をしようと思います。
難しいと感じるかもしれませんが、最後まで読んでマスターしてください!
ふたつの変数について
まず、なぜ、変数がふたつあるのかですが、英語でコードを書くようなプログラミングの場合にも、「グローバル変数」「ローカル変数」という呼び方で、ふたつの変数が存在しています。
それらをスクラッチでは以下の呼び方で使い分けています。
- すべてのスプライト用:←グローバル変数のこと
- このスプライトのみ:←ローカル変数のこと
「グローバル」や「ローカル」という名前は、スクラッチをやっているうちは、無理に覚えなくても大丈夫ですが、将来プログラミングのお仕事をしたいと思っているあなたは、今後、間違いなく耳にするものですので、今のうちから頭の片隅に入れておくといいかもしれません。
変数を使い比べてみよう
言葉で解説するよりも、実際に使ってみた方が、違いが分かると思うので、一緒に以下のコードを作成してみて下さい。
ネコのコード

変数を作成する際に「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のコード修正


ネコ3のコード

コードを実行してみると「HP」と「hp」どちらも、同じように減っていくのが確認出来ると思います。
このままでは「このスプライトのみ」の変数なんて必要ないじゃん。と思ってしまいますよね?
ネコのクローンを作成して確認してみる
スクラッチでは「クローン」を作成したときに「このスプライトのみ」の変数の大切さが理解できるようになります。
それでは、今開いているプロジェクトをコピーして、ネコ2とネコ3を削除してください。
(メニューのファイル→コピーを保存)

ネコ1のコード

このようなコードを作成してみてください。
(ボールのコードは先ほどと同じです)
繰り返しになりますが「ネコ1のHP→すべてのスプライト用」で「hp→このスプライトのみ」という事を忘れないでください。
実行してみると、3匹のネコがそれぞれ、自分のダメージに応じたhpの数字を言うと思います。

言い換えると、クローンされたスプライトひとつひとつが、別々の変数の値を持つことが出来たのです。(少し難しいですね・・・)
では「すべてのスプライト用」の変数で同じことが出来ないか、試してみましょう。
先ほど作成したコードの「ずっと」の部分を以下のように変更してみて下さい。

実行してみると、3匹とも「ネコ1のHP」の数字を言ってはいますが、それぞれのHPではなく3匹のダメージを合わせたHPを言っているのです。
まとめ
少し難しい内容になってしまいましたが「ふたつの変数の違い」と「このスプライトのみの変数の使い方」について解説しました。
スクラッチでは「すべてのスプライト用」の変数を使って大抵のものは作成出来てしまうと思います。
しかし、お仕事のプログラミングの世界では、グローバル変数(すべてのスプライト用)は、トラブル(エラー)のもとになったりもするため、正しい場所のみに使い、ローカル変数(このスプライトのみ)をなるべく使うようにしようと言われたりします。
プロジェクトが複雑になるほど、どちらの変数を使うかは大切になります。
難しい使い分けなどは、徐々に勉強して覚えていけばいいと思いますが、この記事を最後まで読んでくれたあなたは「このスプライトのみ」の変数の大切さを分かってくれたと思っています。
自分の頭の中にある「作りたいもの」を形にするために、一歩一歩、楽しみながら頑張っていきましょう(*^▽^*)
コメント