Scratchで物語を作る方法【逐次処理と並列処理のプログラミング例】

Scratch(スクラッチ)では、キャラクターに台詞を言わせたり背景を切り替えたりして、アニメーションのような物語を作れます。この記事では「こだまでしょうか」をテーマにしたサンプルプロジェクトを例に、逐次処理・並列処理の考え方とプログラミングのポイントを解説します。

動作確認の参考URL:スクラッチ(Scratch)プロジェクト「こだまでしょうか echo」(外部リンク)

サンプルプロジェクト「こだまでしょうか」のスクリプト

このプロジェクトは「ステージ」「スプライトA(Giga)」「スプライトB(Pico)」の3要素で構成されています。それぞれのスクリプトを確認しましょう。

ステージのスクリプト

ステージのスクリプト

スプライトA(Giga)のスクリプト

スプライトA(Giga)のスクリプト

スプライトB(Pico)のスクリプト

スプライトB(Pico)のスクリプト

逐次処理と並列処理とは

今回のプログラミングの核心は「逐次処理」と「並列処理」の使い分けです。映画・ドラマを例に考えると理解しやすくなります。

逐次処理:脚本の順番通りに動く

映画の脚本には、セリフやト書きが一行ずつ順番に書かれています。「AがセリフAを言い終わったら、BがセリフBを言う」というように、1つの処理が終わってから次の処理に進む仕組みが逐次処理です。Scratchでは「〜を送って待つ」ブロックを使うことで実現できます。

並列処理:「よーいスタート」で一斉に動く

撮影現場では「よーい、スタート!」の掛け声とともに全員が同時に演技を始めます。Scratchでは、ひとつのメッセージや背景の切り替えをきっかけに、複数のスプライトが同時に動き出すのが並列処理です。

「イベント」ブロックの6種類

Scratchで逐次処理・並列処理を制御するのが「イベント」ブロックです。スクリプトの先頭にしか置けないという特徴があります。基本の6種類は以下のとおりです。

  • 緑の旗が押されたとき
  • (任意のキーボードの)キーが押されたとき
  • このスプライトが押されたとき
  • 背景が(任意のステージ)になったとき
  • (音量やタイマー)>(任意の数値)のとき
  • (任意のメッセージ)を受け取ったとき

プログラミングのポイント解説

メッセージイベントの入れ子構造

このプロジェクトでは、ステージ・スプライトA(Giga)・スプライトB(Pico)をメッセージイベントでつないでいます。

ステージの「(01_会話スタート)を送って待つ」がプロジェクト全体を包括します。その中でスプライトAとBが「遊ぼう」「ばか」「もう遊ばない」の3回のメッセージイベントを順番に処理します。これが逐次処理の実例です。

スプライトB(Pico)は、Aから送られてくる3回のメッセージをそれぞれ独立したスクリプトで受け取り、処理が終わるたびに終了を返す仕組みになっています。

背景の切り替えをきっかけにした並列処理

「(01_会話スタート)を送って待つ」が完了するとステージの背景画像が切り替わります。これをきっかけに、スプライトAとBが「背景が(Hearts)になったとき」ブロックで同時に動き出します。これが並列処理の実例です。

それぞれのスプライトは表情の変化・セリフ・1秒待ちを組み合わせており、見る人に変化が伝わりやすい作りになっています。

実は「ほぼ同時」の並列処理

背景切り替えで2つのスプライトが同時に動いているように見えますが、厳密には微妙なズレがあると言われています。ただし見た目には同時に見えるため、実用上は気にする必要はありません。

まとめ:Scratchで物語作りを楽しもう

Scratchでは逐次処理と並列処理を組み合わせることで、本格的な物語アニメーションを作ることができます。脚本と同じようにキャラクターの動きを設計し、メッセージや背景切り替えでつなぐのがポイントです。

思い思いのオリジナルストーリーをプログラミングして、ぜひ一般公開してみましょう。

このテーマの関連記事はこちら