Scratchには、他のスプライトやステージに対して合図を送る、メッセージ機能があります。
動画制作では、「Aが『おはよう』と言ったら、Bも『おはよう』と言う」場面で活躍します。
ゲーム開発では、「クリアしたら背景を変える」といった場面で必要です。
メッセージは、使い方を覚えると作品の幅が一気に広がる重要な機能。
少し凝った作品を作る時には必須の機能なので、使い方を理解してプログラムに取り入れましょう。
スクラッチ「メッセージ」機能のメリットと使い道
Scratchのメッセージ機能は、他のスプライトやステージに対して「合図」を送ります。
この送る合図を「メッセージ」と言い、次のような場面で使うと便利です。
- Aが「ただいま」と言う → Bが「おかえり」と返す
- ゲームをクリアする → 背景を変える
- Aが「集合」と命令する → B~DはAの周りに集まる
- ボタンを押す → ゲーム開始
メッセージは、「🏁が押されたとき」ブロックのようにイベントを発生させます。
「🏁が押されたとき」に繋げたブロックが同時に動きだすように、「メッセージ」機能もスクリプトを同時に動かすことができるのです。
複数のブロック間でデータをやり取りすることができるため、プログラミングが簡単になります。
自分の好きなタイミングでイベントを発生させられるので、作品の幅も広がります。
また、ムダなスクリプトがなくなり、プログラムを効率的に動作させることが可能です。
スクラッチで作ったこちらのプロジェクトは、全部で10のメッセージを使っています。
このプログラムを作りながら、簡単にメッセージブロックの使い方を確認します。
「メッセージ」機能の使い方
【イベント】カテゴリにある、次の3つのブロックについて使い方を詳しく解説します。
- メッセージを受け取ったとき
- メッセージを送る
- メッセージを送って待つ
「メッセージを送る」と「メッセージを受け取ったとき」ブロックはセットで使うのが基本です。
- 女の子が「集合っ!」と言ったとき
- 恐竜1~3が女の子のもとへ行く
という動きを作りながら、メッセージ機能の使い方を説明します。
メッセージを送る
合図を送る時は、「メッセージを送る」ブロックを使います。
最初は「『メッセージ1』を送る」となっています。
「メッセージ1」はメッセージの名前ですが、どのようなメッセージなのか判別できませんね。
後から見ても何の合図を送っているのか判断できるように、メッセージの名前を付けて使いましょう。
名前の付け方は簡単です。「メッセージ1」をクリックして、「新しいメッセージ」を選びます。
「新しいメッセージ名」に分かりやすい名前けて「OK」ボタンを押しましょう。
これで新しいメッセージ「集合の合図」が作成されます。
まずは女の子のスプライトを用意し、次のスクリプトを作ります。
- 「🏁が押されたとき」
- 「集合っ!」と2秒言う
- 「集合の合図」を送る
メッセージを送ったら、次は受信側である恐竜のスクリプトを作りましょう。
メッセージを受け取ったとき
合図を受ける時は、「メッセージを受け取ったとき」ブロックを使います。
「メッセージを送る」ブロックと同じように、メッセージ名に新しく名前を付けることもできます。今回は、先ほど名前を付けた「集合の合図」メッセージを選択しましょう。
「メッセージを受け取ったとき」ブロックの後には、受け取ったスプライトにさせたい動きのブロックを繋げていきます。
それでは、恐竜1のスプライトを用意して次のスクリプトを作りましょう。
- 「集合の合図」を受け取ったとき
- 1秒で女の子のもとへ行く
これで、「女の子が『集合っ!』と言ったとき、恐竜1が女の子のもとへ行く」というプログラムができました。
女の子と恐竜1を離して配置し、「🏁」を押してみましょう。
図のように、恐竜1が女の子のもとへ行きましたか?
うまく動いたら、恐竜2と恐竜3のスプライトも用意して、女の子のもとへ向かうスクリプトを作りましょう。
恐竜2は「2秒」、恐竜3は「3秒」で女の子のもとに行くとしてみます。
女の子と恐竜1~3を離して配置し、もう一度「🏁」を押してみましょう。
結果は、図のように恐竜1~3が女の子のもとへ集まれば成功です。
女の子のもとに着く順番は、恐竜1、恐竜2、恐竜3となります。
このように、メッセージ機能は複数のスプライトに同時に合図を送ることができます。
合図を受けた後の動作は、それぞれのスプライトで指定できますので、いろいろなプログラムに応用できそうですね。
メッセージの基本的な使い方が分かったところで、「メッセージを送る」ブロックと似た「メッセージを送って待つ」ブロックの使い方を見ていきましょう。
メッセージを送って待つ(「送る」と「送って待つ」の違い)
合図を送った後、受け取った側の動作が終わるのを待ってから次の動きをしたい場合もありますよね。
そんな時は、「メッセージを送って待つ」ブロックを使います。
「メッセージを送って待つ」ブロックの使い方は「メッセージを送る」ブロックと同じです。
違いは、ブロックを実行する順番です。
「メッセージを送る」は、次のブロックがすぐに実行されます。
「メッセージを送って待つ」は、「メッセージを受け取ったとき」に続くブロックがすべて実行された後に、次のブロックが実行されます。
プログラムを動かしながら、違いを確認しましょう。
先ほど作ったプログラムを少し変更します。
- 変更前
- 女の子が『集合っ!』と言ったとき
- 恐竜1が女の子のもとへ行く
- 変更後
- 両手を上げて
- 女の子が『集合っ!』と言ったとき
- 恐竜1が女の子のもとへ行く
- 最後に両手を下ろす
女の子のスクリプトは次のようになります。
- 「🏁が押されたとき」
- コスチュームを「両手を上げる」にする
- 「集合っ!」と2秒言う
- 「集合の合図」を送る
- コスチュームを「両手を下げる」にする
女の子と恐竜1~3を離して配置し、「🏁」を押してみましょう。
ポイントは、「両手を下げるタイミング」です。「集合っ!」という吹き出しが消えてからすぐに女の子の両手が下がりました。
次に、「『集合の合図』を送る」を「『集合の合図』を送って待つ」に変更します。
- 「🏁が押されたとき」
- コスチュームを「両手を上げる」にする
- 「集合っ!」と2秒言う
- 「集合の合図」を送って待つ
- コスチュームを「両手を下げる」にする
女の子と恐竜1~3を離して配置し、「🏁」を押してみましょう。
「両手を下げるタイミング」は、恐竜1~3がすべて女の子のもとに集まった後であることを確認できましたか?
つまり、メッセージを受け取った側(恐竜1~3すべて)の動作が終わる(女の子のもとに着く)のを待ってから、メッセージを送った側の次の動きが実行されたということです。
メッセージを使ってボタンイベントをつくる
上で作ったプログラムは、「🏁」を押すと動きだしました。次は、ゲームのように「集合」ボタンを押したときにスプライトが動き始めるようにしましょう。
また、何度も女の子と恐竜を離して配置するのが面倒なので、「解散」の動きも作ります。
メッセージで「集合」ボタンが押されたことを送る
「集合」ボタンを用意し、次のスクリプトを作ります。使うメッセージは新しく「集合ボタン押下」と名前を付けましょう。
- このスプライトが押されたとき
- 「集合ボタン押下」を送る(メッセージ)
次に、女の子のスクリプトを変更します。
「🏁が押されたとき」に開始していたスクリプトを「『集合ボタン押下』を受け取ったとき」に変更するだけです。
- 「集合ボタン押下」を受け取ったとき
- コスチュームを「両手を上げる」にする
- 「集合っ!」と2秒言う
- 「集合の合図」を送って待つ
- コスチュームを「両手を下げる」にする
ついでに、ステージも変えましょう。「緑」という背景を用意し、メッセージを受け取った時にステージの背景を変更します。
- 「集合ボタン押下」を受け取ったとき
- 背景を「緑」にする
女の子と恐竜1~3を離して配置し、「🏁」を押しましょう。
これまでと違って女の子は何も言わないので、「集合」ボタンを押します。
ステージが緑色に変わり、これまでと同じように恐竜1~3が女の子のもとに集合すれば成功です。
メッセージで「解散」ボタンが押されたことを送る
「集合」ボタンの処理が完成したら、次は「解散」ボタンを用意してスクリプトを作りましょう。ここからは「集合」ボタンの応用です。
- このスプライトが押されたとき
- 「解散ボタン押下」を送る(メッセージ)
集合と同じように、女の子にも「解散ボタン押下」メッセージを受け取った時のスクリプトを作ります。
女の子も位置が変わるように移動させましょう。
- 「解散ボタン押下」を受け取ったとき
- コスチュームを「片手を上げる」にする
- 「解散っ!」と2秒言う
- 「解散の合図」を送る
- コスチュームを「両手を下げる」にする
- 1秒でどこかの場所へ行く
恐竜1~3にも、女の子が送った「解散の合図」を受けたときのスクリプトを作ります。
- 「解散の合図」を受け取ったとき
- 1秒でどこかの場所へ行く
集合時の動きに合わせて、ステージも色を変えましょう。
- 「解散ボタン押下」を受け取ったとき
- 背景を「黄」にする
さぁ、「🏁」を押して、「解散」ボタンを押しましょう。
ステージが黄色に変わり、女の子が「解散っ!」といった後、みんなが適当な場所に散らばれば成功です(同じような場所に移動する場合もあります)。
これで、「集合」と「解散」を交互に実行でるようになりました。
メッセージ送信先の制限
メッセージは送信先を制限することができません。
たとえば、「集合」ボタンは、恐竜1~3が常に集合の動作をします。緑色の恐竜だけ集合させたい場合もありますよね。その時は、赤い恐竜だけ受信側のスクリプトを作らなければ良いです。
しかし、「集合する恐竜をゲームで遊ぶ人に指定させたい」「ランダムに番号を決めて恐竜を呼び出したい」といった場合にいくつものメッセージを用意するのは大変ですよね。
そんな時は、条件によってメッセージを受けた側の動きを変えるため、変数をつかって動きに制限を設けます。
以下、「ランダムに番号を決めて恐竜を1頭ずつ呼び出す」プログラムを作りながら、変数をつかって動きに制限を付ける方法を確認していきましょう。
変数を使ってメッセージ受信側の動きを変える
「ランダムに番号を決めて恐竜を1頭ずつ呼び出す」プログラムを作ってみましょう。
まずは、「ランダム呼出」ボタンを用意し、次のスクリプトを作ります。使うメッセージは新しく「ランダム呼出のボタン押下」と名前を付けましょう。
- このスプライトが押されたとき
- 「ランダム呼出のボタン押下」を送る(メッセージ)
次に、女の子のスクリプト。
ここで、変数「呼出恐竜番号」を準備します。ランダムに決まる番号を入れておくための箱です。プロジェクト全体で利用するため、作成時には「すべてのスプライト用」を指定して変数を作りましょう。
「集合」のスクリプトを複製して、一部を変更すると簡単に作ることができます。
- 「ランダム呼出のボタン押下」を受け取ったとき
- 「呼出恐竜番号」を「1」から「3」までの乱数にする
- コスチュームを「両手を上げる」にする
- 「恐竜」と「呼出恐竜番号」と「だけ来てください!」と2秒言う
- 「ランダム呼出の合図」を送って待つ
- コスチュームを「両手を下げる」にする
ここから、変数を使ってメッセージ受信側の動きを変えるために大事な処理を作ります。
恐竜1~3で「このスプライトのみ」を指定して変数を作ります。変数名は「恐竜番号」とします。
「🏁」を押した時に、変数「恐竜番号」に恐竜ごとの番号を設定します。
恐竜1~3、女の子が送った「ランダム呼出の合図」を受けたときのスクリプトを作ります。
「もし~なら」ブロックや「もし~なら~でなければ」ブロックを使って、「呼出恐竜番号」とスプライト毎の「恐竜番号」が同じであれば女の子のもとへ向かうようにし、違う場合は女の子の位置と反対へ向かうようにしてみました。
- 「ランダム呼出の合図」を受け取ったとき
- もし「呼出恐竜番号」=「恐竜番号」なら
- 1秒でどこかの場所へ行く
- でなければ、1秒で●●に移動する(※)
(※)今回は女の子の反対方向に向かわせますが、女の子のもとに行かない処理であれば何でもOK
ステージは「紫」という背景を用意し、メッセージを受け取った時にステージの背景を変更します。
- 「ランダム呼出のボタン押下」を受け取ったとき
- 背景を「紫」にする
「🏁」を押してから、「ランダム呼出」ボタンを押しましょう。
ステージが紫色に変わり、セリフに応じた恐竜だけが女の子のもとに行き、それ以外は女の子と違う方向へ向かえば成功です。図は、「恐竜2だけ来てください!」と呼ばれた結果です。
メッセージ機能の応用にチャレンジ
「解散」ボタンの動きは、「集合」ボタンの応用で作れましたね。メッセージ機能に慣れるためにも、次は自由に機能追加・改造してみてください。
何を作れば良いか思いつかない場合は、「分身」や「整列」の動きを見て、機能を作ってみましょう。
「分身」は、クローン機能を使っています。「クローンって何?」という方は、「【スクラッチ】クローン機能を使って遊ぼう」もチェックしてみてください。
メッセージを削除する
Scratch3.0には、メッセージを変更・削除するためのボタンがありません。
しかし、メッセージを使わなくなった場合や名前を付け間違えた場合は、要らないメッセージを削除したくなりますよね。
そんな時は、次の方法でメッセージを削除します。
- 不要なメッセージをすべてのスクリプトエリアから消す
- 違うスプライトを選ぶ
とても簡単ですね。
他にも「ウェブブラウザの更新ボタンを押す」という方法もありますが、保存していない場合は必要なスクリプトも消えてしまう可能性がありますので要注意です!
必ず、保存してから更新してください。
まとめ:メッセージを使って柔軟なプログラムを作ろう
スクラッチのメッセージ機能について見てきました。
メッセージを使ってスプライトやステージに変化や動きを与えることができました。
自分好きなタイミングで自分の好きなイベントを発生させることができるので、プログラムの色々な場面で使えます。
慣れると、他のスプライトの動きを必要以上に意識する必要がなく、プログラムに無駄がなくなります。
変更するときにも変更しやすい柔軟なプログラムが作れますので、試行錯誤しながら、どんどん使ってみてください。