スクラッチプログラミング

8-4 アクションシーンを作ろう

イベントを使って、アクションシーンを作りましょう。2人の少年がサッカーボールを蹴りあっていて、そこに大きな鳥が飛んで来て、ボールを取っていくというシーンです。

ステップ1

  1. スクラッチの画面で新しいプロジェクトを作成し、プロジェクト名を「少年とサッカーボールと鳥」にします。
  2. ネコのスプライトを削除し、スプライトライブラリから少年のDevinとDee、鳥のParrot、サッカーボールのSoccer Ballをプロジェクトに読み込みます。
  3. 背景としてWoods And Benchを読み込みます。
  4. 下図を参考に、スプライトを配置します。

ステップ2

このプログラムはメッセージのやりとりが複雑なので、少しずつ進めていきます。

まずはプログラムのスタートです。プログラムは、Dee(右の男の子)の[緑の旗]のクリックから始めることにします。
Deeの向きを変え、ボールのkickメッセージを送信します。

  1. [スプライトリスト]でDeeを選択し、コードエリアを表示します。
  2. [イベント]-[緑の旗が押されたとき]をドラッグ&ドロップします。
  3. 2人を向かい合わせたいので、Deeを左に向かせます。そのためには、[動き]-[回転方法を[左右のみ]にする]をドラッグ&ドロップし、さらに[動き]-[(90)度に向ける]をドラッグ&ドロップし、90を-90に変更します。
  4. [イベント]-[(メッセージ1)を送って待つ]をドラッグ&ドロップし、メッセージ名をkickに変更します。

[(メッセージ1)を送って待つ]の働きは少し複雑です。

基本的には次のように機能します。

  1. 合図を送る: [(メッセージ1)を送って待つ]が実行されると、ステージとステージ上のすべてのスプライトに「メッセージ1」が一斉に送られます。
  2. 相手の動作を待つ: [(メッセージ1)を受け取ったとき]イベントブロックが設定され、「メッセージ1」を受け取ったスプライトの、[(メッセージ1)を受け取ったとき]で設定されている動作が全部終わるのを待ちます。
  3. 次へ進む: 相手の動作が終わったことを確認してから、次のブロックに進みます。

たとえば今の場合、Deeがkickメッセージをブロードキャストし、それをボールが[(kick)を受け取ったとき]イベントブロックで受け取り、10秒待つとします。
すると、Deeで[(kick)を送って待つ]の次のブロックは10秒後に実行されることになるので、Deeはkickメッセージをブロードキャストした10秒後に、「10秒たった」と言うことになります。


[(メッセージ1)を送る]と[(メッセージ1)を送って待つ]には、次の違いがあります。

  • [(メッセージ1)を送る]:メッセージを送ったら相手の完了を待たずにすぐに次のブロックへ進みます。
  • [(メッセージ1)を送って待つ]:相手の作業が終わるまで、自分のプログラムは一時停止します。

ステップ3

ボールのスプライトのコードブロックの作成に移ります。

まずは[緑の旗が押されたとき]イベントブロックを使って初期設定をします。ボールは最後、鳥にさらわれて非表示にするので、次回の実行に備えてここで表示しておきます。また少し大きいのでサイズを75%にします。

ステップ4

ひきつづきボールのスプライトにコードブロックを設定します。Deeからのkickメッセージに応答して、位置決めをし、左のDevianから右のDeeに移動して戻る動きを付けます。

  1. ボールのスプライトのコードエリアに、2つめのスクリプトを作ります。[イベント]-[(kick)を受け取ったとき]をドラッグ&ドロップします。
  2. [動き]-[x座標を()、y座標を()にする]をドラッグ&ドロップし、xに-100、yに-120を指定します。
  3. [動き]-[(1)秒でx座標を()に、y座標を()に変えるy]をドラッグ&ドロップ、xを32、yを120に変更します。
  4. (3)を複製し、xを-100に、yを-120に変更します。
  5. プログラムを実行します。ボールはすぐに(-100,-120)に移動して、その後右に動き、左に動いて止まります。以降の実行では一往復だけします。

ステップ5

今のところ、ボールは回転せず横滑りしているように見えるので、回転して見えるようにします。そのためには、[(kick)を受け取ったとき]イベントブロックを使って3つめのスクリプトを作成します。

  1. ボールのスプライトのコードエリアに、2つめのスクリプトを作ります。[イベント]-[(kick)を受け取ったとき]をドラッグ&ドロップします。
  2. [制御]-[(10)回繰り返す]をドラッグ&ドロップし、へこみの中に[動き]-[(15)度回す](時計回りの矢印)をドラッグ&ドロップします。
  3. [制御]-[(10)回繰り返す]をドラッグ&ドロップし、へこみの中に[動き]-[(15)度回す](反時計回りの矢印)をドラッグ&ドロップします。
  4. 繰り返しの回数は32回、角度は15度に、ひとまず設定します。
  5. プログラムを実行して、動作を確認します。

ボールが回転して見えるようにするには、繰り返しの回数を変更してテストします。またボールが回転しない場合には、[向き]が[自由に回転]に設定されていることを確認します。

ステップ6

つづいて鳥のスクリプトの作成に移りましょう。鳥のスプライトのコードエリアを開きます。まずは初期設定を行います。

鳥は見えない状態にし、半分のサイズのして、羽ばたきのアニメーションを設定します。そのためには、プログラムのスタート時([緑の旗]ボタンがクリックされたとき)、非表示にして、[ずっと]ブロックの中で[次のコスチュームにする]を使って、アニメーションに見える錯覚をこしらえます。


鳥のスプライトは[隠す]ので、アニメーションは確認できませんが、コードエリアの右上ではアニメーションを見ることができます。また、一時的に[隠す]ブロックをはずして確認する方法もあります。


ステップ7

鳥にさせたい次の動きは、出現することです。鳥はサッカーボールを取っていくので、鳥が現れるタイミングは、ボールが蹴られた後ということになります。

スプライトDeeのコードエリアで、[(kick)を送って待つ]を複製し、「bird_in」という名前のメッセージをブロードキャストします。

鳥のスプライトのコードエリアに移ります。bird_inメッセージが送られてくるので、それを[(bird_in)を受け取ったとき]イベントブロックで受信します。

鳥は非常に状態なので、まずこれを表示します。

そして[緑の旗]ボタンをクリックしてプログラムを実行します。少したつと鳥が現れるので、[赤]ボタンをクリックしてプログラムを停止します。ステージ上の鳥をドラッグして、左上隅の、鳥が少し顔を出しているくらいの位置に移動します。この時の鳥の座標は[動き]-[x座標を( )、y座標を( )にする]ブロックに記録されるので、これをドラッグ&ドロップします((-251, 162)など)。

鳥の移動のアニメーションをには、[動き]-[( )秒でx座標を( )に、y座標を( )に変える]ブロックを使用します。秒数は1秒のまま、行先の座標はDevinの足元辺りにします。そのためには、鳥のスプライトをDevinの足元辺りまでドラッグします。すると[( )秒でx座標を( )に、y座標を( )に変える]ブロックにその位置が記録されるので、そのままドラッグ&ドロップして使用できます((-121, -105)など)。

ステップ8

鳥がボールを奪うには、ボールを奪った瞬間に鳥がtake_ballメッセージを送信し、それを受け取ったボールで[( )秒でx座標を( )に、y座標を( )に変える]を実行して移動させ、最後非表示にします。鳥はメッセージ送信の後、すぐにボールといっしょに移動させたいので、[(take_ball)を送って待つ]でなく、[(take_ball)を送る]にします。ボールはステージの右上隅あたりまで移動させます。

ステップ9

鳥をボールといっしょに移動させます。
ステージで鳥のスプライトを、ボールが消えた辺りまでドラッグします。すると前と同じように[( )秒でx座標を( )に、y座標を( )に変える]ブロックにその位置が記録されるので、そのまま使用します。また、鳥がボールより手前にあってボールを取っているように見えない場合には、スプライトの重なりを調整することで解決できます。[見た目]-[(最前面)へ移動する]ブロックを初期設定時に使用します。

最後、2人の少年の位置や、ボールと鳥の移動など、そのように見える最適な位置を探します。

このプログラムはこのリンクからダウンロードできます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です