- スターター作品
- なし
- 今回の完成サンプル
- なし
さぁ、スクラッチでナニ作る!?
コスチューム番号に0を指定すると末尾に巻き戻るというScratchの仕様と、四捨五入ブロックへの空入力が0を返す仕様を重ねた設計が光っている。コスチュームを1枚追加しても枚数カウントが自動で更新される仕組みは、この2つの仕様を組み合わせた発想から生まれている。グリフパッチがフォント描画に応用した「小技」を、手を動かしながら理解していこう。
動画で見てみよう
[talk]チャンネル登録して応援よろしく!チャンネル登録する[/talk]チュートリアルの元になった作品
[prj-embed prj="1310865237" mini="1" title="プレイしておこう" prj-title="小技:コスチューム自動カウント" prj-author="ok-scratch"]今回の[prj-link prj="1310865237" title="小技:コスチューム自動カウント" author="ok-scratch"]スクラッチを作る参考作品[/prj-link]です。[/prj-embed]今回の目標
スターター作品をリミックスしよう
このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード
#1コスチューム0の裏技
[talk class="m-l-n"]たった数ブロックで、スプライトのコスチュームが何枚あるか自動でわかる裏技を作るよ。まず「待機」コスチュームに切り替えて、今のコスチューム番号を吹き出しで確認しよう。[/talk]準備
スプライト「マリオ」を開く
| スプライトについて |
|---|
| 全コスチュームを順番に切り替えて枚数を数え、結果を表示するスプライト。 |
| どんな役割か |
| マリオのコスチュームを全部チェックしてみよう!走ったりジャンプしたりいろんなポーズが何枚あるか数えて、最後にまとめて教えてくれるよ。 |
実装
ここからが核心。コスチュームを ( ) にするに( ) を四捨五入を入れて、あえて入力欄を空っぽにしておくんだ。四捨五入の入力が空だと0が返ってくるから、「コスチューム0番に切り替えろ」という命令になる。
[talk]Scratchではコスチューム0番は存在しないんだけど、0を指定すると一番最後のコスチュームにジャンプする仕様があるんだ。23枚のコスチュームがあるスプライトなら0番で23番目に飛ぶ。グリフパッチはこの「ラップアラウンド」をフォント描画システムで使って、文字コスチュームの総数を自動取得しているよ。[/talk]
#2枚数を記録する
準備
変数「★コスチューム枚数」を追加
全コスチュームを数えた結果を格納するグローバル変数
実装
コスチューム0の裏技で末尾に飛んだから、今のがそのままコスチュームの総数。吹き出しで確認してみよう。
( ) を ( ) にするで「★コスチューム枚数」変数にその番号を保存したら、次のコスチュームにするで次へ進むよ。末尾の次は先頭に戻るから、コスチューム1番に巻き戻る。もう一度吹き出しで番号を表示して、ちゃんと先頭に戻ったことを確認するんだ。
[talk]ちなみにこの「末尾の次は先頭に戻る」仕組みは、コスチュームアニメーションの基本。次のコスチュームにするをずっと繰り返すだけで走りモーションがループ再生されるのは、コスチュームが自動で巻き戻るおかげ。だからコスチュームの並び順ってめちゃくちゃ大事だよ。[/talk]
普通はコスチュームの枚数を手動で数えて直接書き込むところだけど、この方法ならコスチュームを追加・削除しても自動で正しい枚数が取れる。この仕組みがなかったら、コスチュームを1枚足すたびに枚数を手で直さなきゃいけないよ。
#3結果発表
カウントの仕組みができたから、あとは結果を見せるだけ。( ) と言うで「★コスチューム枚数」の値を含んだメッセージを表示して完成だよ。( ) と ( )でテキストと変数の値をつなげて1つの文章にしているんだ。
四捨五入の空入力で0を作るテクニックと、コスチューム番号0のラップアラウンド――この2つを組み合わせた、Scratchの仕様を知り尽くした小技だよ。
まとめ
四捨五入の空入力で0を生み出して、コスチューム番号0のラップアラウンドをトリガーする――知らなきゃ絶対思いつかない小技だよね。一度覚えたらフォント描画みたいな大きな仕組みにも応用できるから、グリフパッチがなぜこれを使うのか、ちょっとだけ見えてきたんじゃないかな。