シューティングゲームでは自機の攻撃だけでなく敵キャラクターからの攻撃も必ず必要になります。
そこで敵キャラクターの攻撃パターンについて、いくつか記事に分けて紹介しています。今回はパターンその2です。
この記事を読んでいただくと、シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方が分かります。
なお、この記事で使用しているスプライト(キャラクター・背景・オブジェクト・音声など)はすべてパブリックドメインの無料の素材をダウンロードして使用しています。
スクリプトの作り方
完成した動き
敵キャラクターがステージの上端から降りてきて、弾丸を打ちながら左右どちらかに2回転したあと、ステージ下端まで移動するパターンです。
完成したスクリプト
完成したスクリプトの全体です。スプライトは「背景」「敵機2」「敵の弾2」の3つです。
この章の内容をご自身のScratch環境に反映すれば、同じ動きを再現することができます。
【スプライト】
シューティングゲーム用の背景・キャラクター・アイテム等の画像や音声は、パブリックドメインである「スーパーパワーアセットパック(CC0)のspace-shooter」を使っています。
【背景のスクリプト】
背景のスクリプトはありません。大きさを150%または160%に拡大して使用しています。
【敵機2のスクリプト】
敵機は数秒おきにクローンで生成しています。
クローンの動きの複雑な部分は「ジグザク回転」定義ブロックにまとめています。
また、「敵の弾2」スプライトのクローンを敵機2のクローンの中で生成しています。
- 変数:このスプライトのみ
- 敵の弾2x:すべてのスプライト用
- 敵の弾2y:すべてのスプライト用
- 敵の弾2d:すべてのスプライト用
【敵の弾2のスクリプト】
今回は、前回の記事「シューティングゲーム 敵の攻撃をつくる方法①」とは違い弾丸の向きを変えながら動かす必要があるので「回転方法を(自由に回転)にする」必要があります。
「敵の弾2」のクローンは、敵機2のクローンからつくられます。X座標とY座標と向きは敵機2のクローンの中で設定します。
さいごにクローンを削除します。
スクリプトの説明
プログラムを作っていく中でポイントとなる部分を説明します。(背景スプライトの説明は省略します)
ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
敵キャラクターと弾丸のコスチュームの向きを右真横(90度)に向けてつくっていることに注目してください。
今回は「敵機2」スプライトも「敵の弾2」スプライトも様々な方向に向きを変化させる必要があります。このような時は右真横、つまり90度を向けてつくる必要があります。
なぜならスプライトは作成した時点で90度を向いた状態でつくられるためです。
このようにコスチュームの向きとプログラム上の向きを90度にそろえておけば、例えば180度(真下)に向けたときはコスチュームも真下(180度)を向いてくれますし、0度(真上)に向けたときはコスチュームも真上(0度)に向いてくれるようになります。
また、スプライト(コスチューム)の向きを自由に変えるためにはプログラムの方でも気を付ける箇所があります。
それは「回転方法を(自由に回転)にする」ブロックを配置しておくことです。こうすることでどの方向にも向きを変えられるようになります。
ポイント②:敵の動きをつくる1
敵機は数秒おきにクローンで生成しています。
敵機をY座標が-50までは下方向に一直線に動かしたあと、「ジグザク回転」定義ブロックの処理に入ります。定義ブロックの処理が終わったらステージ下端までまっすぐ下へ移動します。
さいごにクローンを削除します。
【敵機2のスクリプト】
ポイント③:敵の動きをつくる2(ジグザクと回転)
「ジグザク回転」定義ブロックでは、左右どちらかの上方へ移動する処理と2回転するプログラムの組み合わせでできています。
さらに2回転するプログラムの中で「弾丸クローン作成」定義ブロックの処理に入ります。
左右どちらかの判定は「変数」に入れる値によって振り分けています。
【敵機2のスクリプト】
ポイント④:機体から弾丸のクローンをつくる
「弾丸クローン作成」定義ブロックでは、その瞬間の「敵機2」のX座標とY座標と向きをそれぞれ別々の変数に格納します。
なお、「敵の弾2x」「敵の弾2y」「敵の弾2d」変数は「すべてのスプライト用」でつくっています。
格納された座標と向きは、あとで「敵の弾2」スプライトのクローンの中で読み取って弾丸の座標と向きにつかいます。
※コンピュータの処理はとても速いので変数への格納と格納した値の読み取りは一瞬で行われます。
【敵機2のスクリプト】
ポイント⑤:弾丸と機体の座標と向きを一致させてから動かす
弾丸は敵機2スプライトから発射しているように見えないと自然に見えません。また、敵キャラクターが向いている方向へ弾丸を発射させる必要があります。
そのため、弾丸のクローンが生成されたら変数の値を読み取って、「敵の弾2」クローンの座標と「敵機2」クローンの座標、「敵の弾2」クローンの向きと「敵機2」クローンの向きを一致させます。
座標と向きが決まったらあとは敵の弾2のクローンを動かすだけです。ステージの下端に触れるまで10歩ずつ動かしています。動かす方向は「敵の弾2d」変数で決められています。
【敵の弾2のスクリプト】
ポイント⑥:クローンは使い終わったら削除する
Scratch3.0の仕様ではステージ上に存在できるクローンの上限数は300個までと決められているので、クローンは使い終わったら削除しておきます。
特に弾丸は短時間で300個以上のクローンが生成される可能性が高いのでこのことは忘れないようにしましょう。制限を超えるとそれ以上クローンが生成されなくなります。
ここまでのポイントを押さえてスクリプトを組むことが出来たら、シューティングゲームで敵キャラクターが攻撃するプログラムの2パターン目は完成です!
失敗しやすいポイント
下の図のようにスプライトの向きを下向きにして動かしてみるとどうなるでしょうか?(これはプログラム上は90度と認識しているが見た目では180度を向いているように見える状態)
下の図(アニメーション)のとおり、下方向(180度)に向けて動かすと左を向いてしまいます。
このように元々が90度ズレてスプライトが作られてしまっているので、プログラムを実行しても90度ズレたまま実行されてしまいます。
応用編
今回応用編は特にありません。
まとめ
さいごに、今回の記事で説明した『シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方2パターン目』のポイントをまとめます。
- ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
- ポイント②:敵の動きをつくる1(機体のクローンを生成する)
- ポイント③:敵の動きをつくる2(ジグザクと回転)
- ポイント④:機体から弾丸のクローンをつくる(機体の動きの処理と分ける)
- ポイント⑤:弾丸と機体の座標と向きを一致させてから動かす
- ポイント⑥:クローンは使い終わったら削除する
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)