
Scratch 一部のコスチュームをループする

コスチュームが1~9まであって、1~8までをループさせたい。
というときにどうするかという話です。
1~9をループするのであれば、以下のように書けば、終わりですよね。

今回ご説明するのは、9は除いて1~8でループさせたいときの話です。
どんな場面で役に立つか
9は除いて1~8でループさせたいってどんなときに使うの?
と思われるかもしれません。
「Bear-walking」というスプライトを使って説明しますね。

「Bear-walking」には、コスチュームが8つ用意されていて、このコスチュームをループすると、歩いているようなアニメーションが出来上がります。

いい感じですね。
今回は、「呼びかけたら(マウスをクリックしたら)こちらを振り向いてくれる」というアプリにしたいと思います。
まずコスチュームを追加します。(Bear-aを追加)。
コスチュームを1つ追加したので、1~9まで9つのコスチュームがありますね。
この状態で、さっきのコードのまま動かすと、呼びかけてもいないのにこっちを振り向きます。

こういうときに9を除いて、1~8でループさせたいです。
結論:一部のコスチュームをループさせる方法
前置きが長くなりましたが、9を除いて、1~8でループさせるには、以下のように書きます。

動かしてみましょう。

うまくいきましたね。
振り向く動きも加えましょう。

コードはこのようになります。

もっと厳密にするなら、マウスが押された動作の検知は、別のループにした方がいいのですが、テーマの本筋ではないので、このシンプルなコードで十分でしょう。
ポイント
ということで、ポイントは、この部分ですね。

1~8まででループさせたいので、「8で割った余り」とします。
もし1~6でループさせたい場合は、”6”で割った余りとしてください。
変数「コスチューム番号」は0からスタートしています。
0の場合、「8で割った余り」は0ですね。それに1を加えて、コスチューム番号1としています。
1の場合は、「8で割った余り」1+1で、コスチューム番号2
2の場合は、「8で割った余り」2+1で、コスチューム番号3
・・
7の場合は、「8で割った余り」7+1で、コスチューム番号8
8の場合は、「8で割った余り」0+1で、コスチューム番号1
なぜ+1なのか
頭のいい人は、それなら、変数「コスチューム番号」を1からスタートして、+1しなければできそう。と思うかもしれません。

確かに、うまく行きそうです。
1の場合は、「8で割った余り」1 → コスチューム番号1
2の場合は、「8で割った余り」2 → コスチューム番号2
・・・
7の場合は、「8で割った余り」7 → コスチューム番号7
8の場合は、「8で割った余り」0 → コスチューム番号0
問題は、この「コスチューム番号0」のときに起こります。
Scratchでは、コスチューム番号に0を指定すると、一番下のコスチュームになってしまいます。
上のコードで動かしてみると、こうなります。

こちらを振り向く、一番下のコスチュームが出てきてしまいますね。
なぜ+1なのかがわかっていただけましたでしょうか。
ということで、一部のコスチュームをループさせる方法について説明しました。
頻繁に使うわけではないですが、頭の片隅に覚えておいてください。
おまけ:コスチュームをランダムにする
ちなみにコスチュームをランダムにする方法はこちらです。

(終わり)