JJ SHIMA Blog

二児のパパがゲーム開発アレコレを書いているブログ。Unity / UE / Scratch / プログラミングゼミ / プログラミング教育

[Scratch] サッカーゲーム(PK戦)を作ろう!-シュートしよう(2/6) -

スクラッチ

サッカーゲームPK戦を作ろう シュートしよう編(2/6)

前回は必要なスプライトを準備しました。

第2回では、それらを使い、

方向を選んでゴールにシュートする部分を作ります。

(解説まとめはこちら)
www.papa-sensei.com

[目次]

 
 


選手スプライトを配置しよう

まずは、ステージ上に選手やボールのスプライトを配置しましょう。
f:id:papa-sensei:20200302091844p:plain

今回使うのは、選手・ボール・キーパー・レフェリーです。
それぞれの位置や大きさは次の通りです。

スプライト X Y 大きさ 向き
選手
-52
-112
70
90
ボール
0
-112
70
0
キーパー
0
0
50
90
レフェリー
-180
-65
80
90

 
 

矢印で方向を選ぼう

次に、方向を選ぶ矢印と下地を表示します。
f:id:papa-sensei:20200227103236p:plain

まずは方向下地と矢印を配置します。
特に大きさや位置の指定はないので、好きな位置に配置してください^^
遊びやすいように画面下くらいに置くのが良いでしょう。

続いて表示するブロックの動きを作っていきます。

下地の表示

まずは矢印の下に表示する下地のスプライトです。
下地は、シュートする時・キーパー操作する時で表示を変える必要があります。

f:id:papa-sensei:20200224232358p:plainf:id:papa-sensei:20200224232556p:plain

ブロックの動きとしては、
シュートする時・キーパー操作する時でそれぞれコスチュームを変えます。 f:id:papa-sensei:20200302094549p:plain

シュート準備:「シュートを決めろ!」のコスチューム表示
キーパー準備:「キーパーを操作しろ!」のコスチューム表示
同時に、選手などのスプライトよりも上に表示されて欲しいので、
「最前面」へ移動するブロックも追加します。

また、下地などは使い終わったら表示を消す必要もあるため、
「方向を消す」イベントを受け取ったら隠す動きも用意しておきます。
 

矢印表示

次に矢印ボタンの動きです。
まずは、選んだ方向を保持しておくための変数を作ります。
f:id:papa-sensei:20200302095621p:plain 「えらんだ方向」変数の中に、矢印で選んだ方向を入れていきます。

f:id:papa-sensei:20200302095724p:plain ブロックの動きとしては、方向下地と同じで、
「方向ひょうじ」というイベントを受け取ったら表示、消すイベントを受け取ったら消す。
そして、スプライトが押された(方向が選択された)ら、選んだ方向を変数の中に入れて、
「方向けってい」のイベントを送ります。

上の動きを、左・真ん中・右の矢印それぞれに追加していきます。
選んだ方向だけは、それぞれの矢印の向きによって変えます。

方向
0
真ん中 1
2

これで方向を選ぶ動きは完成です。
 

選んだ方向にシュートしよう

続いて、選んだ方向にシュートできるようにします。

背景

まずは背景のプログラムです。
f:id:papa-sensei:20200302102514p:plain
スタートしたら、まずは「シュート準備」のイベントを送り、方向下地などを表示します。
矢印が押され、「方向けってい」のイベントを受け取ったら、
方向表示を消して、「シュート」します。
 
f:id:papa-sensei:20200302102920p:plain またこの時、「ボールの方向」変数を用意し、選んだ方向を入れておきます。
このボールの方向を見て、ボールを飛ばしていきます。

ボールの動き

シュートする上で最も大切な、ボールが飛んでいく動きです。
選んだ方向によって、左・真ん中・右 へとボールを飛ばします。

ボールが飛んでいく位置 f:id:papa-sensei:20200302104317p:plain

ボールは初期位置(x:0, y-112)から、それぞれ次の位置に飛ばします。

向き X Y
-60 20
真ん中 0 60
60 20

ボールの移動には「○秒でX,Yを変える」ブロックを使います。
f:id:papa-sensei:20200302105017p:plain

ボールのプログラム
f:id:papa-sensei:20200302105036p:plain

それではボールのプログラムです。
背景から「シュート」のイベントを受け取ったら、 ボールの方向の変数の中身を見て、
・左(0) なら 1秒で(-60, 20) に移動する
・真ん中(1) なら 1秒で(0, 60) に移動する
・右(2) なら 1秒で(60, 20) に移動する

動きを作ります。 これで、方向によってボールが移動できるようになりました。

f:id:papa-sensei:20200302105344p:plain

また、ボールは何度も使うので、位置や表示を元に戻すためのプログラムも用意しておきます。
 

選手のプログラム

シュートをうつときに、選手がボールを蹴る動きをするようにします。
f:id:papa-sensei:20200302110549p:plain

選手のコスチュームには、蹴る前・蹴るの2つのコスチュームがあります。
f:id:papa-sensei:20200227100115p:plain

「シュート」のイベントを受け取った時に、蹴るコスチューム(ここでは先行シュートという名前)にします。
また、選手も何度も使うため、コスチュームを戻すリセット処理も作っておきます。

レフェリーのプログラム

最後にレフェリーのプログラムです。
レフェリーは、方向が決まったら、ホイッスルを鳴らして試合を開始します。
方向決める → (1秒待つ) → ホイッスル吹く → (鳴り終わるまで待つ) → シュート
f:id:papa-sensei:20200302111147p:plain

レフェリーは「ホイッスル」のイベントを受け取ったら、コスチュームをreferee-c(手をあげる動き)に変えて、whistleの音を鳴らします。
この時、音が鳴り終わるまで待ちたいので「終わるまで」のブロックを使います。
ボール、選手と同様に状態を元に戻すためのリセット処理も作ります。
 
最後に背景のプログラムに「ホイッスル」のイベントを送るブロックを追加します。
「シュートの前」に「ホイッスルを送って待つ」ブロックを追加します。
f:id:papa-sensei:20200302111901p:plain ホイッスルの音が鳴り終わるまで待ちたいので、イベントを送る側も「送って待つ」ブロックにします。
合わせて、スタートした時に一度それぞれの状態を元に戻す「リセット」イベントも送るようにします。 f:id:papa-sensei:20200302112441p:plain

これでシュートをうつ動きが完成しました!

今回までの動き

方向を選択して、その方向にシュートができるようになりました。
使うスプライトが増えてくると、それぞれの動き・イベントを送る、受け取る関係、
また、状態を元に戻すためのリセットなどの処理も大事になってきます。
それぞれのスプライトの動きや流れを考えながら作りましょう^^