スポンサーリンク
Scratch

スクラッチ(scratch)で「このスプライトのみ」変数はコピー禁止

Scratch

「このスプライトのみ」の変数を作るときに、他のスプライトからコピーはお勧めしません。
コピーで作ると同じようなプログラムを作るときに楽ができます。
しかし、コピー先で変数の表示ができなくなったり、実際にどんな値が入っているのかよくわからない状態となります。
今回は、「このスプライトのみ」で変数を作るとき気を付けることを解説します。
ちょっと難しい話です。

スポンサーリンク

変数「このスプライトのみ」の使い方

変数を「このスプライトのみ」について使い方を説明します。

変数の作り方の違いです。
変数を作るときに「このスプライトのみ」を選択して作ります。

この様に作ると、どうなるのでしょうか。
試しに作ってみます。

リンゴと

リンゴとバナナの2つのスプライトを用意します。

まず、リンゴのスプライトに「このスプライトのみ」で変数を作ってみます。

「フルーツの名前」という変数を「このスプライトのみ」で作ってみました。

もちろん、リンゴのスプライトには「フルーツの名前」という変数が作られています。

パナなのスプライト見てみましょう。
「フルーツを名前」という変数がありません。

他のスプライトでは利用することができない変数を作ることができるのです。

もう一つ試してみましょう。

バナナのスプライトに同じ名前「フルーツの名前」という変数を作ってみます。

次に、この変数を使う簡単なプログラムを作ってみます。
バナナのスプライトの変数「フルーツの名前」に「バナナ」と入れるプログラムを作ります。

このプログラムを実行した結果はこのようになります。
※変数の中身を表示するように、変数の横のチェックを入れておいてください。

このプログラムを実行した結果、バナナ(Bananas)のスプライトの変数だけに「バナナ」と入ります。


リンゴのスプライトにも同じようなプログラムを作って、「リンゴ」と入力してみます。

「フルーツの名前」という同じ名前の変数ですが、リンゴとバナナのスプライトで違う値が入っていることがわかります。

「このスプライトのみ」の使い方はわかったでしょうか。

コピーで作ってみる

では、「このスプライトのみ」で作った変数をコピーしてほかのスプライトに作ってみます。

準備として、新しいスプライトを1つ用意します。

風船のスプライトを用意しました。

もちろん、この時点では「フルーツの名前」という変数はありません。

そこで、バナナのスプライトから、変数に値を入れるプログラムをコピー&ペーストで作成します。
バナナのスプライトを表示して、プログラムを一度クリックします。
次にctrl+Cを押します。

次に、風船のスプライトを表示します。
そこで、ctrl+Vを押すと、バナナと同じプログラムが作成されます。

同時に、風船のスプライトの変数に「フルーツの名前」が作られていることがわかります。
変数を作る手間も省けてラッキーです。

しかし、変数を表示していますが風船(Balloon1)のスプライト用の変数が見当たりません。
リンゴ(Apple)とバナナ(Banana)の変数のみです。

このように、バナナのスプライトで「このスプライトのみ」で作ったのに、他のスプライト(風船のスプライト)で共有されているように見えます。

試しに、風船のプログラムを「フルーツの名前」に「風船」と入れるプログラムに改造して実行してみます。
バナナのスプライトはそのままです。

これを実行した結果。
Bananaの「フルーツの名前」には「バナナ」と入っています。

「風船」とは入っていません。

これは、プログラムが実行される順番が関係しているのでは?
と考えた方もいるでしょう。
風船スプライトのプログラムよりも後にバナナのプログラムが実行されたので、結果として「バナナ」と入っている可能性もあります。

そこで、バナナのスプライトのプログラムを消して実行してみました。

それでも「風船」を値が変わることはありませんでした。

実は「このスプライトのみ」は機能しているかもしれない

一見したところ、「このスプライトのみ」で作った変数が役割を果たしていないように見えます。
しかし、きっちり仕事をしていました。

プログラムにもう一工夫してみます。

バナナと風船のスプライトに「〇〇という」のプログラムを追加します。

このプログラムを実行してみると、それぞれのスプライトに「バナナ」「風船」と値が入っているようです。

きっちり確認ができていないのですが、スプライトの数が多くなるとプログラムした通りの値が入らないことがあるようです。
前回作成したトランプを配るプログラムで、各スプライトにトランプのマークと数字を識別する用の変数を作りました。
この変数は52枚(トランプの枚数)のスプライトにコピペで作りました。
すると、トランプの識別が上手くできませんでした(きちんと動くスプライトもあったのですけど)。
結局、変数は52枚のスプライトすべて手作りすることで解決しました。

まとめ

「このスプライトのみ」で作った変数を他のスプライトでコピーして使う事はお勧めしません。
同じ様なプログラムを作るときは面倒ですが、手作成しましょう。
コピーするスプライトが少ないときは問題ないような動きもします。
しかし、スプライトの数が多くなるとおかしな値が入ることがあるようです。

コメント

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