シューティングゲームでは自機の攻撃だけでなく敵キャラクターからの攻撃も必ず必要になります。
そこで敵キャラクターの攻撃パターンについて、いくつか記事に分けて紹介しています。今回はパターンその4です。
この記事を読んでいただくと、シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方が分かります。
なお、この記事で使用しているスプライト(キャラクター・背景・オブジェクト・音声など)はすべてパブリックドメインの無料の素材をダウンロードして使用しています。
スクリプトの作り方
完成した動き
敵キャラクターが左右に動きながら上下にも動きます。動いている間は下方向に弾丸を発射しつづけます。また、停止すると一定の周期で左右に弾幕を打ちます。
このように2つの動きを組み合わせた敵の攻撃パターンになります。
完成したスクリプト
完成したスクリプトの全体です。スプライトは「背景」「敵機4」「敵の弾4」の3つです。
この章の内容をご自身のScratch環境に反映すれば、同じ動きを再現することができます。
【スプライト】
シューティングゲーム用の背景・キャラクター・アイテム等の画像や音声は、パブリックドメインである「スーパーパワーアセットパック(CC0)のspace-shooter」を使っています。
【背景のスクリプト】
背景のスクリプトはありません。大きさを150%または160%に拡大して使用しています。
【敵機4のスクリプト】
「緑の旗でスタート」ブロックを5つに分けてつくっています。それぞれ役割を分けていて「変数の値を変更する部分」「X座標を決める部分」「Y座標を決める部分」「弾丸のクローンを作る部分」「それ以外」としています。
必ずしも分ける必要はありませんが、分かりやすくしようと思っていたらこういう形になりました。
色んな所で「変数=0」と「変数=1」でプログラムを分けていますが、0の時は左右の動きと攻撃、1の時は止まっているときの攻撃となっています。
なお、「変数」と「θ(シータ)」変数は「このスプライトのみ」で作っています。
- 変数:このスプライトのみ
- 敵の弾4x:すべてのスプライト用
- 敵の弾4y:すべてのスプライト用
- 敵の弾4d:すべてのスプライト用
- θ:このスプライトのみ
【敵の弾4のスクリプト】
今回は、前回の記事「シューティングゲーム 敵の攻撃をつくる方法③」と同様に弾丸の向きを変えて動かすパターンを含むので「回転方法を(自由に回転)にする」にします。
「敵の弾4」のクローンは、敵機4のスプライト本体からつくられます。X座標とY座標と向きは敵機4のプログラムの中で設定します。
さいごに使い終わったクローンを削除します。
スクリプトの説明
プログラムを作っていく中でポイントとなる部分を説明します。(背景スプライトの説明は省略します)
ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
(ここは「敵の攻撃をつくる①~③」の記事で何度も説明しているので簡単に記載します)
今回は敵キャラクターは回転しませんが弾丸は回転させる必要があります。
このように回転させる必要のあるスプライトのコスチュームの向きは右真横(90度)に向けてつくることに注意してください。これはスプライトは作成した時点で90度を向いた状態でつくられるためです。
また、プログラムの中でスプライト(コスチューム)の向きを自由に変えるためにはスクリプトの方でも気を付ける箇所があります。
それは「回転方法を(自由に回転)にする」ブロックを配置しておくことです。こうすることでどの方向にも向きを変えられるようになります。
今回でいうと「敵機4」では「回転しない」ブロックを配置して、「敵の弾4」では「自由に回転」ブロックを配置しています。
ポイント②:敵の動きをつくる
【敵機4のスクリプト(X座標の動き)】
X軸の動きは、変数=0のときに左右に動かしていて変数=1のときに停止させています。
なお、左右に動いている間に変数の値が1に変わる可能性があるので、左右に移動中の処理に「変数=1なら」の条件文を追加しています。
【敵機4のスクリプト(Y座標の動き)】
Y軸の動きは、変数=0のときにsin関数を使って半径50の円運動をさせています。変数=1のときはY座標を100で固定しています。変数θ(シータ)は角度を表しています。
ここではY軸の動きしか定義していないので実際は円運動ではなく上下運動になります。
ポイント③:機体から弾丸のクローンをつくる
「敵の弾4のクローンを作る」ブロックの手前で、その瞬間の「敵機4」のX座標とY座標と向きをそれぞれ別々の変数に格納します。
なお、「敵の弾4x」「敵の弾4y」「敵の弾4d」変数は「すべてのスプライト用」でつくっています。
格納された座標と向きは、あとで「敵の弾4」スプライトのクローンの中で読み取って弾丸の座標と向きにつかいます。
※コンピュータの処理はとても速いので変数への格納と格納した値の読み取りは一瞬で行われます。
変数=0のときは向きを180度(下向き)固定として、変数=1のときは15度ずつ変化させています。
【敵機4のスクリプト】
ポイント④:変数を介して機体から弾丸クローンに座標と向きの情報を渡して動かす
弾丸が敵機4スプライトから発射しているように自然にみえるように、弾丸のクローンが生成されたら変数の値を読み取って「敵の弾4」クローンの座標と「敵機4」スプライトの座標を一致させます。
座標と向きが決まったらあとは敵の弾4のクローンを動かすだけです。ステージの下端に触れるまで10歩ずつ動かしています。動かす方向は「敵の弾4d」変数の値で決められています。
【敵の弾4のスクリプト】
ただし、弾丸が敵機4の先端から発射されるように見せたいので「Y座標を(敵機4のY座標-25)」として少し位置を下方向にズラしておきます。
ポイント⑤:クローンは使い終わったら削除する
Scratch3.0の仕様ではステージ上に存在できるクローンの上限数は300個までと決められているので、クローンは使い終わったら削除しておきます。
特に弾丸は短時間で300個以上のクローンが生成される可能性が高いのでこのことは忘れないようにしましょう。制限を超えるとそれ以上クローンが生成されなくなります。
ここまでのポイントを押さえてスクリプトを組むことが出来たら、シューティングゲームで敵キャラクターが攻撃するプログラムの4パターン目は完成です!
失敗しやすいポイント
失敗しやすいポイントはこちらの記事に記載した内容と同じなので省略します。
【Scratch 3.0】シューティングゲーム 敵の攻撃をつくる方法①(Tips)
【Scratch 3.0】シューティングゲーム 敵の攻撃をつくる方法②(Tips)
応用編
今回応用編は特にありません。
まとめ
さいごに、今回の記事で説明した『シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方4パターン目』のポイントをまとめます。
- ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
- ポイント②:敵の動きをつくる(X軸とY軸の動きを別々に)
- ポイント③:機体から弾丸のクローンをつくる(機体の動きの処理と分ける)
- ポイント④:変数を介して機体から弾丸クローンに座標と向きの情報を渡して動かす
- ポイント⑤:クローンは使い終わったら削除する
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)