イベント

バージョン

この記事の対象バージョンは2.0です。

概要

イベントとはユーザーの行動やスプライトの挙動をきっかけにして
別のスプライトが命令を実行する機能のことです。
例えば、ユーザーのクリックやキー入力、背景の切り替えなどが
イベント発生のきっかけになります。

送信と受信

イベントは送信と受信の関係になっています。
scratch_0135

送信

送信側はイベントが発生したことを発信します。
イベントの送信者はユーザーやスプライト、背景です。

受信

受信側は数あるイベントが発信されている中で
命令を進めるために必要なイベントを選択して受信します。
イベントの受信者は基本的にスプライトと背景です。

イベント使用の考え方

イベントを使用するかどうかの考え方として
「誰かが○○をやったら△△をする」という
仕様、または考えに至ったらイベントを
利用できないかを考えてください。

命令の種類

イベントの命令の種類には受信命令と送信命令、送受信命令があります。

受信命令 旗がクリックされたとき
スペースキーが押されたとき
このスプライトがクリックされたとき
背景が○○になったとき
○○ > △△のとき
○○を受け取ったとき
送信命令 ○○を送る
送受信命令 ○○を送って待つ
背景を○○にして待つ
○○と聞いて待つ

メッセージ

メッセージとはスクラッチで作成する自作イベントのことです。

作成方法

新しいメッセージを作成するにはまず「○○を受け取ったとき」「○○を送る」
「○○を送って待つ」命令のドロップダウンリストをクリックします。

scratch_0145

次にリストの中から「新しいメッセージ…」という項目をクリックします。

scratch_0146

するとウィンドウが表示されるので新しいメッセージの名前を入力して
「OK」ボタンをクリックします。

scratch_0147

使用方法

作詞したメッセージは「○○を受け取ったとき」「○○を送る」
「○○を送って待つ」命令で指定することができます。
各命令の詳細は各命令の説明の部分で行っていますのでここではしません。

使用する場面

別のスプライトに現在の状況を知らせたい時などにメッセージを送信します。
例えば「スプライトとスプライトが重なったとき」や
「ゲームクリアや、ゲームオーバーになってゲームを終了するとき」などで
特定のスプライトや背景に対して別の動きをしてほしいときにメッセージを使用します。

受信命令

受信命令の特性は命令ブロックの上に命令を重ねられないことです。
ブロックの上部分の一部が丸くなっています。
このようなブロックのことをハットブロックと呼んでいます。

旗がクリックされたとき

scratch_0126
「旗がクリックされたとき」命令はScratchの起動と
同時にイベントを受信することを意味しています。
「旗マークをクリックする = Scratch起動」です。

scratch_0136
旗がクリックされたときサンプル

サンプルを実行すると猫が左右に移動し続けます。

○○キーが押されたとき

scratch_0127
「○○キーが押されたとき」命令は○○で指定したキーが
押されたときにイベントを受信する命令です。

scratch_0137
○○キーが押されたときサンプル

サンプルを実行すると左右キーを押すことで猫が左右に移動します。

このスプライトがクリックされたとき

scratch_0128
「このスプライトがクリックされたとき」命令は
命令を実行しているスプライトがクリックされた時に
イベントを受信する命令です。

scratch_0138
このスプライトがクリックされたときサンプル

サンプルを実行すると猫が拡大縮小を繰り返しており、
その猫に対してクリックをすると「拡縮中!!」としゃべります。

背景が○○になったとき

scratch_0129
「背景が○○になったとき」命令は○○で指定した背景に切り替わったときに
イベントを受信する命令です。

scratch_0139
背景が○○になったときサンプル

サンプルを実行するとピンク色の背景では猫の色はオレンジになり、
水色の背景では猫の色は青色になります。

○○ > △△のとき

scratch_0130
「○○ > △△のとき」命令はScratchで指定している○○が△△の値より
大きいときにイベントを受信する命令です。
○○には「音量」「タイマー」「ビデオモーション」があります。

scratch_0140
○○ > △△のときサンプル

サンプルを実行するとタイマーの値が3を越えると猫が回りだします。

○○を受け取ったとき

scratch_0131
「○○を受け取ったとき」命令は○○の部分で指定したメッセージを
受信したときに、そのメッセージ受信をイベントとして受信する命令です。

scratch_0141
○○を受け取ったときサンプル

サンプルを実行すると猫がりんごに向かっていき、りんごと猫で当たり判定が
成立すると「GameFinish」もテキストが表示されます。

送信命令

送信のイベントはイベントという形で送信をします。
この送信を別スプライトが「○○を受け取ったとき」命令で受信し、
そこからそのスプライトが動き出します。

○○を送る

scratch_0132
「○○を送る」命令は○○のメッセージを送信する命令です。
このメッセージを送信したら別のスプライトが
「○○を受け取ったとき」命令で受信して処理を進めるための
トリガとして使用します。

scratch_0142
○○を送るサンプル

サンプルを実行すると猫が画面の端から端に移動するたびに
背景が切り替わるようになっています。

送受信命令

送受信命令は送信で送ったイベントを受信したスプライトなどが
そのイベントを終了した命令を終わらせるまで先に進めないという
特性を持っています。
「送信」はイベント、「受信」は終了時の情報であったり、
「終了通知」だったりと様々です。
※終了通知はプログラムでは感知できません。

scratch_0149

○○を送って待つ

scratch_0133
「○○を送って待つ」命令は送信したメッセージを
別のスプライトの背景が「○○を受け取ったとき」で使用した場合、
全ての「○○を受け取ったとき」が終了するまで
次の命令に進まず、待機する命令です。

scratch_0143
○○を送って待つサンプル

サンプルを実行すると「GameStart」の文字が表示され、
それが消えると同時に猫が動き出します。
その猫が画面の端まで移動すると「GameFinish」の文字が表示されます。

背景を○○にして待つ

scratch_0045
「背景を○○にして待つ」命令はイベント命令です。
背景を○○に切り替えてメッセージを送信します。
それを受信したスプライトがメッセージを受信して
命令を開始しますが、その命令が終了するまで
この命令は終了しません。

scratch_0150
背景を○○にして待つサンプル

サンプルを実行すると猫が動き出して、一定の位置に到達すると背景が切り替わります。
背景の命令はずっと命令の中に「背景を○○にして待つ」を4つ設定しているだけです。
これだけで、猫の受信命令が終わるたびに命令が進み、
それをずっと繰り返すことになります。

○○と聞いて待つ

scratch_0134
「○○と聞いて待つ」命令はユーザーに対して○○の質問を行う命令です。
質問の回答は入力欄が表示されるので、そちらにユーザーが入力するまで
この命令は先に進みません。
※入力された内容は「答え」の値ブロックに格納されます。

scratch_0144
○○と聞いて待つサンプル

サンプルを実行すると猫が「何に見えますか?」と聞いてきます。
画面下に入力欄が表示されるので、そこで答えを入力し、
Enterを押すと、入力した内容を人が答えます。

問題



上の画面の挙動と同じものを次の命令ブロックを使用して作成して下さい。
	
scratch_0148

各スプライトの挙動

各スプライトは以下のように作成してください。

猫をクリックするとりんごにメッセージを送信する
りんご(Apple)
旗をクリックされたときは非表示にしておく
旗猫からメッセージを受信したらクローンを作成する
※作成位置は猫の座標を使用する
クローンはAbbyに向かって飛ぶ
※猫の位置は動かさない
Abbyに当たったら、Abbyにメッセージを送信する
Abbyにメッセージを送信したらクローンを削除する
人(Abby)
旗をクリックと同時以下の挙動を実装する
「りんごがほしい」と考える
反転を左右のみに限定する
向きを猫のほうに向ける
りんごからメッセージを受け取ったら
「ありがとう」と数秒間言うtd>

解答

こちらに解答がありますので、答えを作ったら確認してください。