Scratchプログラミング言語では,スプライト間でメッセージを送り,受け取った側のスクリプト(プログラム)を実行させることができる.簡単な応用プログラムを作る前に関連ブロックの説明をしておきたい.
メッセージ送受信関連イベントには「メッセージを受け取ったとき」,「メッセージを送る」,「メッセージを送って待つ」の三種のブロックが準備されている.
すべてのスプライトがメッセージを受け取る
ブロックにはメッセージの初期値として「メッセージ1」が設定されているが,プログラムの内容に合ったメッセージを新規に作成した方が分かりやすい.新規メッセージを指定するには,スクリプト → イベント →[メッセージ1▼を送る]を選択し,小さい▼をクリックするとメッセージ1の下に「新しいメッセージ...」が現れる.これをクリックすると新しいメッセージ名を入力するように促されるので任意の文字列を入力してOKを押す.
例えば,今回の例ではスプライト(飛行機)を飛ばすため "fly" を使ったが,”start”など何でもよい.
メインプログラムでこれが実行されると,不特定多数の相手(スプライト)に"fly"というメッセージが送られる.
メッセージを受け取るスプライトのプログラムの最初に置くブロック
当初,航空母艦から戦闘機を発進させるプログラムを作るつもりでいたが,平和な時代に取り上げる題材ではないと思い変更した.ここでは,雲の中から飛行機が現れ,空の彼方へ飛び去るプログラムである.したがって,メインプログラムは雲である.雲は画面の任意の位置に←↑↓→で移動できるようにした.さらにスペースキーを押すと「飛べ(fly)」のメッセージを発信する.
「緑の旗」がクリックされた時,表示するスプライトの大きさを決める.
「ずっと」の繰り返しブロックは縦方向最下段の「⤴」と繋がっていてずっと処理を繰り返す.その中に「もし〜なら,でなければ」の条件判断を行うブロックが入っている.
まず,スペースキーが押されたか否かの判断.もし押されたら,「fly」メッセージを全スプライトおよび背景へ送信する.そうでなければ「でなければ」以下のブロック群(キー操作によるスプライト移動)へ処理が移行する.
4種の上下左右矢印キー操作によるスプラウト移動については前回説明したとおりである.
次図は雲スプライトの透過型PNG画像である.雲のため分かりにくいが,周囲が網の目になっていれば透過型である.透過型画像にしないと雲は画像枠を含めた長方形として表示される.
メッセージを受け取った飛行機は雲の位置へ移動し,雲の中から現れる.雲を飛行場にすれば離陸シーンを作ることができる.飛行機の遠近感を表現するために,X軸移動に合せて飛行機のサイズを減少させている.飛行機スプライトの「条件付き繰り返し文」の「x座標(Airplane) > 260まで繰り返す」は三種のブロック(青,緑,黄)の組合せでできている.
透過型画像
背景画像
実行画面を収録 (QuickTime Playerによって) した動画は以下のとおりである.
左は帆かけ舟のプログラムである.メッセージを受け取ると帆かけ舟は右から左へ x 座標が −100を超えるまで移動する.そのため,「x座標を(−0.5 )ずつ変える」にした.右のプログラムでは,虹スプライトが fly を受け取り,少しずつ濃くなった後,しだいにうすくなり消える.そのために「見た目」の「幽霊」の効果を使用した.
船のスクリプト
虹のスクリプト
背景をスプラウトとみなしてプログラムを作れば変化を付けることができる.飛行機が飛び去り,船が画面の中央付近までくると,船に「change」等のメッセージを発信させ,背景がそのメッセージを受取り,色調を変化させ夕焼け状態を5秒間保持した後,「画像効果をなくす」を実行し,初期状態の色調に戻す.
背景の色調を変えるスクリプト
いろいろなスプライトを並行,あるいは連続的に実行してストーリーのある動画を制作することができる.
今回は動画のストーリーを変更したので,メインプログラムで「雲」の位置を変えることになってしまったが,単なる「情景変化」なら「雲」は位置を固定(雲の大きさ,位置およびメッセージ送信部分だけ)しても構わない.
画像は Scratchライブラリに用意されているものを用いた.雲は適当な写真の一部をGIMPプログラム(フリー)で透過型PNPファイルに変換した.
矢印キーで移動させるプログラムはゲームなどで使用される定型プログラムを参考にした.
パソコンは Mac mini (core i5 2.5GHz, メモリ16GB) であるが,この程度の並行処理はスムースに実行できる(ターボモードではない).
Scratch3の場合の画面