スクラッチコーチキャンプ スクラッチで使える無料素材集
  • 素材
  • 修行
  • はじめての方へ
  • スクラッチゲームの作り方

    #011 スプライト同士がメッセージを送り合う作り方|魔法使いと弟子のあいさつリレー

    #011 スプライト同士がメッセージを送り合う作り方|魔法使いと弟子のあいさつリレー
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし
    [soy-series name="はじめてのスクラッチ"]

    さぁ、スクラッチでナニ作る!?

    魔法使いから弟子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]

    準備

    スプライト「ウィザード」を開く

    ウィザードウィザード
    スプライトについて
    画面右側に立つ魔法使い。ゲーム開始時に「こんばんは」と挨拶し、弟子たちへ呼びかけのメッセージを送る
    どんな役割か
    ウィザードが画面右に現れて「こんばんは」って言うとこを作るよ。言い終わったら弟子を呼ぶメッセージを送る流れまで一緒に組もう!

    実装

    step-0

    まずはウィザードの初期設定から。イベントgreenflag が押されたときのあとに回転方法を「左右のみ」にして向きを-90度(左向き)にし、座標(160, -40)に配置するよ。回転方法を「左右のみ」にしておくと、左を向いたときにキャラがひっくり返らないんだ。

    向きを-90度にすると左向きになるのがポイント。Scratchでは90度が右、-90度が左、0度が上を向く仕組みだよ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    旗を押すとウィザードが画面の右側に現れて、左を向いたね。

    #2あいさつとメッセージ送信

    準備

    メッセージ「魔法使いの呼びかけ」を追加

    ウィザードが弟子たちに呼びかけるときに送るメッセージ

    メッセージ「魔法使いの呼びかけ」を追加

    実装

    step-1

    ウィザードの位置が決まったら、次はあいさつの動作を足そう。見た目( ) と ( ) 秒言うで「こんばんは。」と1秒間言って、そのあとイベント( ) を送るで「魔法使いの呼びかけ」メッセージを送る流れだよ。

    このイベント( ) を送るが今回のカギになるブロック。メッセージを送ると、そのメッセージを待っている全スプライトが一斉に動き出す。テレビの放送みたいなもので、1つの局が発信したら受信機を持ってる人全員に届く仕組みなんだ。

    #3弟子1の配置

    [talk class="m-l-n"]ウィザードの準備ができたから、次は弟子1を作っていこう。[/talk]

    準備

    スプライト「弟子1」を開く

    弟子1弟子1
    スプライトについて
    画面左側に立つ弟子。魔法使いの呼びかけを受けて「こんばんは」と返事し、他の弟子へ返答メッセージを送る
    どんな役割か
    弟子1が魔法使いに呼ばれたら「こんばんは」って返事するとこを作るよ。返事が終わったら他の弟子にも知らせるメッセージを送る流れも組んでいこう!

    実装

    step-2

    イベントgreenflag が押されたときで旗がクリックされたら、座標(-170, -50)に配置する。画面の左側に立たせるだけのシンプルなコードだね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    ウィザードが「こんばんは。」って言った。弟子1も画面の左側にスタンバイしてるっしょ。

    #4弟子1の返事

    準備

    メッセージ「弟子の返答」を追加

    弟子1が返事を終えた後、他の弟子たちへ知らせるために送るメッセージ

    メッセージ「弟子の返答」を追加

    実装

    step-3

    弟子1がウィザードからのメッセージを受け取って返事をするコードを作るよ。イベント( ) を受け取ったときで「魔法使いの呼びかけ」を受け取ったら、「こんばんは。」と1秒言ったあと、イベント( ) を送るで今度は「弟子の返答」という別のメッセージを送るんだ。

    つまりメッセージのリレーが起きる仕組みだよ。ウィザード→弟子1→次の弟子たちへ、とバトンが渡っていくイメージだね。

    [talk]「全部同じ名前のメッセージでよくない?」って思うかもしれないけど、それだとウィザードがメッセージを送った瞬間に弟子全員が同時に反応しちゃうんだ。「魔法使いの呼びかけ」と「弟子の返答」を分けることで、順番通りにあいさつが回っていくんだよ。学校の連絡網で「先生→班長」と「班長→班員」が別の電話であるのと同じ理屈だね。[/talk]

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    今度はウィザードに続いて弟子1も「こんばんは。」って返事したね。

    #5弟子2の配置

    [talk class="m-l-n"]弟子1のコードが完成したから、弟子2にとりかかろう。[/talk]

    準備

    スプライト「弟子2」を開く

    弟子2弟子2
    スプライトについて
    画面中央下に立つ弟子。弟子1の返答メッセージを受け取って「こんばんは」と挨拶する
    どんな役割か
    弟子2が弟子1からのメッセージを受け取って「こんばんは」って挨拶するとこを作るよ。メッセージを受け取ってセリフを言う流れをサクッと作ろう!

    実装

    step-4

    弟子1と同じパターンで、イベントgreenflag が押されたときのあと座標(-30, -130)に配置するよ。画面の中央下あたりに立つ位置だね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    弟子2が画面の下のほうに現れた。

    #6弟子2のあいさつ

    step-5

    弟子2は弟子1が送った「弟子の返答」メッセージを受け取って動くよ。イベント( ) を受け取ったときで「弟子の返答」を受け取ったら、「こんばんは。」と1秒間言う。

    弟子1のときと違って、弟子2は次にメッセージを送る必要がないんだ。あいさつを受けて返事をする、それだけのシンプルな役割だよ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    弟子1からのメッセージで弟子2も「こんばんは。」って言うようになったね。

    #7弟子3の配置

    [talk class="m-l-n"]弟子2のコードが完成したから、最後の弟子3にとりかかろう。弟子2と同じパターンで配置するよ。[/talk]

    準備

    スプライト「弟子3」を開く

    弟子3弟子3
    スプライトについて
    画面左上に立つ弟子。弟子1の返答メッセージを受け取って「こんばんは」と挨拶する
    どんな役割か
    弟子3も弟子1からのメッセージを受け取って「こんばんは」って挨拶するよ。弟子2と同じ仕組みだから、パターンをつかんで一気に作ろう!

    実装

    step-6

    イベントgreenflag が押されたときのあと座標(-80, 110)に移動させる。こっちは画面の左上あたり。4体のキャラクターがそれぞれ違う位置に散らばるレイアウトになっているんだ。

    [talk]Scratchのステージは横480×縦360の座標系で、中心が(0, 0)だよ。今回の4体は(160, -40)、(-170, -50)、(-30, -130)、(-80, 110)と、画面全体にバランスよく散らばってる。キャラの配置は「画面全体をどう使うか」から考えるのが基本だよ。[/talk]

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    弟子3が画面の左上に現れた。

    #8弟子3のあいさつ

    step-7

    最後に弟子3もあいさつするコードを作ろう。弟子2とまったく同じ仕組みで、イベント( ) を受け取ったときで「弟子の返答」を受け取ったら「こんばんは。」と1秒間言うコードだよ。

    ここで面白いのが、弟子2と弟子3は同じ「弟子の返答」メッセージを受け取って同時にあいさつするってこと。1つのメッセージで複数のスプライトが一斉に反応できる、これがメッセージの便利なところ。次回は「みんな集合」で、スプライト同士の連携をさらに深めていこう!

    まとめ

    今回はメッセージを使ってスプライト同士を連携させる仕組みを学んだよ。「送る」と「受け取ったとき」を組み合わせるだけで、こんなにきれいなリレーができるんだ。メッセージ名を変えることで順番をコントロールできるのが今回の最大のポイント。次回は「みんな集合」でさらに面白い連携を作っていこう!

    ブクマよろしくお願いします!という口コミを寄せてくれた方 ブクマよろしくお願いします!
    どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!