- スターター作品
- なし
- 今回の完成サンプル
- なし
さぁ、スクラッチでナニ作る!?
魔法使いから弟子1、弟子1から弟子2・弟子3へとメッセージが枝分かれしていく構造が効いている。2つのメッセージ名を使い分けることで、全員一斉ではなく順番通りに連鎖させるタイミング制御を、条件分岐なしで実現している。1対1リレーと1対多ファンアウトを組み合わせたこの設計が、メッセージ機能の使いどころを端的に示している。どう組み立てているか、作り方を見ていこう。 参考資料:スクラッチプログラミング事例大全集
動画で見てみよう
[talk]チャンネル登録して応援よろしく!チャンネル登録する[/talk]チュートリアルの元になった作品
[prj-embed prj="1311991702" mini="1" title="プレイしておこう" prj-title="はじめてのスクラッチ #011" prj-author="ok-scratch"]今回の[prj-link prj="1311991702" title="はじめてのスクラッチ #011" author="ok-scratch"]スクラッチを作る参考作品[/prj-link]です。[/prj-embed]今回の目標
- ウィザードが挨拶してメッセージを送る
- 弟子1がメッセージを受け取って返事し、次のメッセージを送る
- 弟子2と弟子3が同時にメッセージを受け取って挨拶する
スターター作品をリミックスしよう
このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード
#1ウィザードの配置
[talk class="m-l-n"]前回は「もし〜なら・でなければ」を使って重力ゲームを作ったよね。今回はガラッと変わって、スプライト同士がメッセージをやり取りしながら順番にあいさつしていく作品を作るよ。[/talk]準備
スプライト「ウィザード」を開く
| スプライトについて |
|---|
| 画面右側に立つ魔法使い。ゲーム開始時に「こんばんは」と挨拶し、弟子たちへ呼びかけのメッセージを送る |
| どんな役割か |
| ウィザードが画面右に現れて「こんばんは」って言うとこを作るよ。言い終わったら弟子を呼ぶメッセージを送る流れまで一緒に組もう! |
実装
まずはウィザードの初期設定から。
向きを-90度にすると左向きになるのがポイント。Scratchでは90度が右、-90度が左、0度が上を向く仕組みだよ。
#2あいさつとメッセージ送信
準備
メッセージ「魔法使いの呼びかけ」を追加
ウィザードが弟子たちに呼びかけるときに送るメッセージ
実装
ウィザードの位置が決まったら、次はあいさつの動作を足そう。( ) と ( ) 秒言うで「こんばんは。」と1秒間言って、そのあと( ) を送るで「魔法使いの呼びかけ」メッセージを送る流れだよ。
この( ) を送るが今回のカギになるブロック。メッセージを送ると、そのメッセージを待っている全スプライトが一斉に動き出す。テレビの放送みたいなもので、1つの局が発信したら受信機を持ってる人全員に届く仕組みなんだ。
#3弟子1の配置
[talk class="m-l-n"]ウィザードの準備ができたから、次は弟子1を作っていこう。[/talk]準備
スプライト「弟子1」を開く
| スプライトについて |
|---|
| 画面左側に立つ弟子。魔法使いの呼びかけを受けて「こんばんは」と返事し、他の弟子へ返答メッセージを送る |
| どんな役割か |
| 弟子1が魔法使いに呼ばれたら「こんばんは」って返事するとこを作るよ。返事が終わったら他の弟子にも知らせるメッセージを送る流れも組んでいこう! |
実装
#4弟子1の返事
準備
メッセージ「弟子の返答」を追加
弟子1が返事を終えた後、他の弟子たちへ知らせるために送るメッセージ
実装
弟子1がウィザードからのメッセージを受け取って返事をするコードを作るよ。( ) を受け取ったときで「魔法使いの呼びかけ」を受け取ったら、「こんばんは。」と1秒言ったあと、( ) を送るで今度は「弟子の返答」という別のメッセージを送るんだ。
つまりメッセージのリレーが起きる仕組みだよ。ウィザード→弟子1→次の弟子たちへ、とバトンが渡っていくイメージだね。
[talk]「全部同じ名前のメッセージでよくない?」って思うかもしれないけど、それだとウィザードがメッセージを送った瞬間に弟子全員が同時に反応しちゃうんだ。「魔法使いの呼びかけ」と「弟子の返答」を分けることで、順番通りにあいさつが回っていくんだよ。学校の連絡網で「先生→班長」と「班長→班員」が別の電話であるのと同じ理屈だね。[/talk]
#5弟子2の配置
[talk class="m-l-n"]弟子1のコードが完成したから、弟子2にとりかかろう。[/talk]準備
スプライト「弟子2」を開く
| スプライトについて |
|---|
| 画面中央下に立つ弟子。弟子1の返答メッセージを受け取って「こんばんは」と挨拶する |
| どんな役割か |
| 弟子2が弟子1からのメッセージを受け取って「こんばんは」って挨拶するとこを作るよ。メッセージを受け取ってセリフを言う流れをサクッと作ろう! |
実装
弟子1と同じパターンで、
#6弟子2のあいさつ
弟子2は弟子1が送った「弟子の返答」メッセージを受け取って動くよ。( ) を受け取ったときで「弟子の返答」を受け取ったら、「こんばんは。」と1秒間言う。
弟子1のときと違って、弟子2は次にメッセージを送る必要がないんだ。あいさつを受けて返事をする、それだけのシンプルな役割だよ。
#7弟子3の配置
[talk class="m-l-n"]弟子2のコードが完成したから、最後の弟子3にとりかかろう。弟子2と同じパターンで配置するよ。[/talk]準備
スプライト「弟子3」を開く
| スプライトについて |
|---|
| 画面左上に立つ弟子。弟子1の返答メッセージを受け取って「こんばんは」と挨拶する |
| どんな役割か |
| 弟子3も弟子1からのメッセージを受け取って「こんばんは」って挨拶するよ。弟子2と同じ仕組みだから、パターンをつかんで一気に作ろう! |
実装
[talk]Scratchのステージは横480×縦360の座標系で、中心が(0, 0)だよ。今回の4体は(160, -40)、(-170, -50)、(-30, -130)、(-80, 110)と、画面全体にバランスよく散らばってる。キャラの配置は「画面全体をどう使うか」から考えるのが基本だよ。[/talk]
#8弟子3のあいさつ
最後に弟子3もあいさつするコードを作ろう。弟子2とまったく同じ仕組みで、( ) を受け取ったときで「弟子の返答」を受け取ったら「こんばんは。」と1秒間言うコードだよ。
ここで面白いのが、弟子2と弟子3は同じ「弟子の返答」メッセージを受け取って同時にあいさつするってこと。1つのメッセージで複数のスプライトが一斉に反応できる、これがメッセージの便利なところ。次回は「みんな集合」で、スプライト同士の連携をさらに深めていこう!
まとめ
今回はメッセージを使ってスプライト同士を連携させる仕組みを学んだよ。「送る」と「受け取ったとき」を組み合わせるだけで、こんなにきれいなリレーができるんだ。メッセージ名を変えることで順番をコントロールできるのが今回の最大のポイント。次回は「みんな集合」でさらに面白い連携を作っていこう!