変数のクローン時の動き

Scratchの変数に関して、共有範囲がよくわからなかったのでいろいろ試してみた結果を記載します。
本記事はこちらのコードをベースに書いています。(https://scratch.mit.edu/projects/384836271)


variables_create

変数を作るときに、"すべてのスプライト", "このスプライトのみ"の2種類を選択することができます。
すべてのスプライト向けなのかこのスプライト向けなのかはGlobal変数、Local変数といった感じで比較的わかりやすいですよね。
すべてのスプライト用にした場合は、すべてのストライプから参照、更新可能で、同じ値が全スプライトで共有されます。このスプライトのみにした場合は、そのスプライト内のみで利用可能な変数になります。

よくわからなかったのが、このスプライトのみにした場合で、さらにそのスプライトの中でクローンした場合、その変数はスプライト内で共有の変数なのか、クローン固有の変数なのかです。

結果から言うと、使い方によってはどちらにもなりえるので、使い方に注意する必要があります。
Youtubeでも動きを説明していますのでこちらも参照してください。




親で更新するとスプライト内で共有される

scratch_variable_index

このスクリプトで"index"という変数に着目してください。この変数はクローンされる前の親で変数の値を処理しています。この場合、この変数は親の変数となりスプライト内で共有されます。
つまり、誰かがindexを更新すると全クローンにその変更が反映されます。

クローン内でのみ更新・参照するとクローン固有の変数になる

scratch_variable_xspeed

このスクリプトの"xspeed"という変数の着目してください。
xspeedはクローンの中でのみ更新・参照されます。この場合この変数はクローン固有の変数になります。

コメントお願いします。

あくまで個人的な実験からの動作仕様予測ですので、もし誤り等あればご指摘お願いします。