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