
シューティングゲームでは自機の攻撃だけでなく敵キャラクターからの攻撃も必ず必要になります。
そこで敵キャラクターの攻撃パターンについて、いくつかの記事に分けて紹介しています。今回はパターンその3です。
この記事を読んでいただくと、シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方が分かります。
なお、この記事で使用しているスプライト(キャラクター・背景・オブジェクト・音声など)はすべてパブリックドメインの無料の素材をダウンロードして使用しています。
シューティングゲームとは、戦闘機・宇宙船・ロボットなどを操作して、レーザー・ミサイル・銃などの武器を用いて敵を射撃(シューティング)しながら進んでいくゲームの総称(国内での略称は「STG」)。画面上に大量の弾丸が飛び交うものは「弾幕シューティング」と呼ぶ。
スクリプトの作り方
完成した動き
敵キャラクターがステージ上部で左右に移動しながら弾丸を乱れ打ちします。また姿を消したり現れたりを不規則に繰り返します。姿が現れている間しか弾丸を発射しません。

完成したスクリプト
完成したスクリプトの全体です。スプライトは「背景」「敵機3」「敵の弾3」の3つです。
この章の内容をご自身のScratch環境に反映すれば、同じ動きを再現することができます。
【スプライト】
シューティングゲーム用の背景・キャラクター・アイテム等の画像や音声は、パブリックドメインである「スーパーパワーアセットパック(CC0)のspace-shooter」を使っています。
背景 敵機3 敵の弾3
【背景のスクリプト】
背景のスクリプトはありません。大きさを150%または160%に拡大して使用しています。
【敵機3のスクリプト】
敵機は左右に移動しながら弾丸のクローンを作成しつづけるようになっています。ただし、「変数=1」のとき、つまり「幽霊効果=0(効果がない=表示されている)」ときに弾丸のクローンは作成されます。
弾丸をつくるプログラムは、「弾丸クローン作成」定義ブロックにまとめています。
- 変数:このスプライトのみ
- 敵の弾3x:すべてのスプライト用
- 敵の弾3y:すべてのスプライト用

【敵の弾3のスクリプト】
今回は、前回の記事「シューティングゲーム 敵の攻撃をつくる方法②」と同様に弾丸の向きを変えながら動かす必要があるので「回転方法を(自由に回転)にする」必要があります。
「敵の弾3」のクローンは、敵機3のスプライト本体からつくられます。X座標とY座標は敵機3のプログラムの中で設定します。
さいごにクローンを削除します。

スクリプトの説明
プログラムを作っていく中でポイントとなる部分を説明します。(背景スプライトの説明は省略します)
ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
敵キャラクターと弾丸のコスチュームの向きを右真横(90度)に向けてつくっていることに注目してください。

今回は「敵機3」スプライトも「敵の弾3」スプライトも様々な方向に向きを変化させる必要があります。このような時は右真横、つまり90度を向けてつくる必要があります。
なぜならスプライトは作成した時点で90度を向いた状態でつくられるためです。
このようにコスチュームの向きとプログラム上の向きを90度にそろえておけば、例えば180度(真下)に向けたときはコスチュームも真下(180度)を向いてくれますし、0度(真上)に向けたときはコスチュームも真上(0度)に向いてくれるようになります。
また、スプライト(コスチューム)の向きを自由に変えるためにはプログラムの方でも気を付ける箇所があります。
それは「回転方法を(自由に回転)にする」ブロックを配置しておくことです。こうすることでどの方向にも向きを変えられるようになります。

ポイント②:敵の動きをつくる
敵の動きは、Y座標=100の高さで左右の端まで交互に移動をつづけます。
移動しながら「弾丸クローン作成」定義ブロックを呼び出しています(あとで説明)。
【敵機2のスクリプト】

ポイント③:不定期に消えたり現れたりする
3~6秒経過後に「幽霊の効果を100にする」ブロックで画面上から消えて、1~4秒経過後に画面上に現れます。この処理をずっと繰り返しています。
【敵機2のスクリプト】

ポイント④:機体から弾丸のクローンをつくる
「弾丸クローン作成」定義ブロックでは、その瞬間の「敵機3」のX座標とY座標をそれぞれ別々の変数に格納します。
なお、「敵の弾3x」「敵の弾3y」変数は「すべてのスプライト用」でつくっています。
格納された座標は、あとで「敵の弾3」スプライトのクローンの中で読み取って弾丸の座標につかいます。
※コンピュータの処理はとても速いので変数への格納と格納した値の読み取りは一瞬で行われます。
【敵機3のスクリプト】

ポイント⑤:変数を介して機体から弾丸クローンに座標の情報を渡して動かす
弾丸は敵機3スプライトから発射しているように見えないと自然に見えません。
そのため、弾丸のクローンが生成されたら変数の値を読み取って、「敵の弾3」クローンの座標と「敵機2」スプライトの座標を一致させます。
座標と向きが決まったらあとは敵の弾3のクローンを動かすだけです。ステージの下端に触れるまで10歩ずつ動かしています。
【敵の弾3のスクリプト】

ただし、弾丸が敵機3の先端から発射されるように見せたいので「Y座標を(敵機3のY座標-25)」として少し位置を下方向にズラしておきます。

ポイント⑥:クローンは使い終わったら削除する
Scratch3.0の仕様ではステージ上に存在できるクローンの上限数は300個までと決められているので、クローンは使い終わったら削除しておきます。
特に弾丸は短時間で300個以上のクローンが生成される可能性が高いのでこのことは忘れないようにしましょう。制限を超えるとそれ以上クローンが生成されなくなります。

ここまでのポイントを押さえてスクリプトを組むことが出来たら、シューティングゲームで敵キャラクターが攻撃するプログラムの3パターン目は完成です!
失敗しやすいポイント
失敗しやすいポイントはこちらの記事に記載した内容と同じなので省略します。
【Scratch 3.0】シューティングゲーム 敵の攻撃をつくる方法①(Tips)
【Scratch 3.0】シューティングゲーム 敵の攻撃をつくる方法②(Tips)
応用編
今回応用編は特にありません。
まとめ
さいごに、今回の記事で説明した『シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方3パターン目』のポイントをまとめます。
- ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
- ポイント②:敵の動きをつくる
- ポイント③:不定期に消えたり現れたりする
- ポイント④:機体から弾丸のクローンをつくる(定義ブロック)
- ポイント⑤:変数を介して機体から弾丸クローンに座標の情報を渡して動かす
- ポイント⑥:クローンは使い終わったら削除する
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)