Master.typeX 2021/05/21 13:32

CF2.5講座第10回:簡単なシューティングゲームを組んでみよう!(後編)

どうも、Master.typeXです。
今回は続きとなってます。

前回記事はこちらから

前回はプレイヤーの生成やコントロールまでは
解説したものの、やたらと長くなりそうなので
敵や敵の出現処理、そして難易度UPの処理の前で
終わってましたのでそこからです。

敵の生成処理

敵の生成の前に重要なオブジェクトを一つ。
それはO_制御用変数です。
コレは本来ならば一部グローバル変数として
取り扱う変数やここで使う生成処理など
ゲーム全体で使う変数を取り扱うだけのオブジェクトです。

残機やスコアはホントはグローバル変数の方が
取り回しはいいんですが、今回は講座用と言うことで
このようなオブジェクトを用意しました。

で、話を戻して敵を生成するには
このO_制御用変数の中にある「V_タイマー」を
1加算していき、一定値以上になったら敵を生成する
高速ループを一回回すという感じです。

敵出現時間ですが先程のオブジェクトの中にある「V_レベル」
を参照して出現時間が変わるようになってます。
レベルの処理についてはまた後述。

高速ループの内容は
敵を左上よりちょっと上に一旦作ってから
X座標をRRandom(2つの範囲内の乱数)で
変更しています。
そして、敵もバウンスボールで作ってあるので
その速度をRRandomで30~60までの
速度になるようにしています。

敵の処理

グループ分けとしては
「弾に当たったら破壊」
「プレイヤーが当たったらプレイヤーを破壊」
「画面外に行ったら破壊」「各ループ」
「各レベルの処理」
とちょっと多いですが中身は「弾に当たったら破壊」
以外はそんなに複雑怪奇じゃないと思います。

■弾に当たったら破壊
オブジェクト同士の衝突条件で
「プレイヤーの弾と敵が当たった時」に
発生するイベントです。
レベルが3より下ならスコアを獲得し
敵の撃破数を1加算します。

しかしレベルが3以上ならば
それに加えて高速ループで
8方向に弾を発射するようにしています。
いわゆる撃ち返し弾ですね。
撃ち返し弾のループ回数は8回で
方向は「ループ回数x4」となります。
ちなみに16方向にする場合は回数を16にして
方向を「ループ回数x2」にするとうまく出来ます。

なお、今回忘れてますが
プレイヤーの弾が敵に当たった時の処理は
破壊するかどうかはゲームデザインによります。
「通常弾は貫通しないがレーザーは貫通」なんて
処理を考えるようになったらちょっと頭を捻りましょう。
例えば弾に「F_貫通」というフラグを作って
レーザー弾ならコレをデフォルトでオンにして
先程の条件分岐がちょっと増えるが
非貫通時の処理と貫通時の処理で変えれば
なんとかなるはずです。

CF2.5+なら子イベントでもっと簡単に出来ます。

■プレイヤーが当たったらプレイヤーを破壊
そのまんまですね。
こちらも衝突条件で
「プレイヤーの当たり判定と敵」が衝突した時に
当たり判定とアイテム判定と外側のグラフィックを
すべて破壊してO_制御用変数の中の残機を1引きます。
そしてプレイヤーのスタート位置である
O_プレイヤー生成位置の「V_生成時間」を90に
設定します。敵弾も同じ処理です。

■画面外に行ったら破壊
コレ割と重要な処理です。
敵はY座標480以上になったら破壊し
敵弾は表示領域から-16離れたら破壊するという
単純な処理なのですが、コレを忘れると
オブジェクトが永遠に残り続け
すぐにフレームのオブジェクト制限に引っかかり
動作がおかしなことになります。
それに処理落ちを引き起こす原因となるので
「不要になったオブジェクトはちゃんと破壊する」
というのは多分どのツールでも同じなので
覚えておきましょう。

■各ループ
以前の講座で行ったオブジェクトごとに行われる
特殊な高速ループです。
ぶっちゃけ今回あんまり意味ないが一応念の為。

■「各レベルの処理」
ここは攻撃処理のイベントとなってます。
レベル1からプレヤーに向けて
弾を発射するようになっていて
レベル2以上は弾が3WAYになっています。

3WAY弾は弾生成の高速ループで
一旦プレイヤーのいる方向に合わせた後
ループインデックスが1なら現在方向から-2
2なら現在方向から+2すると3WAYになります。
・・・ぶっちゃけもっといい作り方があると思う。

レベルアップ処理

ここではO_制御用変数を使います。
敵撃破のイベントでこのオブジェクトの
「V_敵撃破数」を増加させていましたが
コレが一定位置以上になったら
「V_レベル」を増加させていきます。

レベルについてなんですが
そのまま敵を倒し続けても面白みもないので
「敵を倒せば倒すほど難易度が上がる」
というゲームシステムにしたくて導入しました。


とまあ、解説はこれで以上となります。
本当はここにゲームオーバーの処理を書くべきだったんですが
忘れてしまったのでしょうがない。

まあ、単純に残機が0より下になったら
文字列で「ゲームオーバー」とでも書かせて
スペースキーなりなんなりで
フレームをリセットさせれば完成なんですが。


応用するなら?

応用案とすればグレイズ・・・
いわゆるカスリ判定ですね。
コレはアイテム判定と同じく矩形の判定を作って
敵弾が判定と衝突した時に
スコアを伸ばすなり、なんなりすればいいと思います。
何に使うかは製作者のアイデア次第ですね。

敵の動きは今回はまっすぐ移動ですが
動作用のカウンターを作り
一定値になったら向きを変えて見たり
サインコサイン使ってゆらゆら動かしたりなど
色々作るといいかもしれません。
自分は数学弱いのであんまり使えないけどな!

後はボムを作ってみたり
自機のスピードを調整できるようにしたり
得点や前述のボムや1UP作ったりなど・・・
色々とアイデアが浮かぶはず。
自機のスピードを変えるときは
高速ループ式はちょっと不向きかもしれないが。


とまあ、これにてシューティング編は以上となります。
近いうちにちゃんとゲームオーバーを入れた
サンプル動作プログラムを
アツマールやPLiCyに公開したりします。
一緒に変なのも上げそうだが

ではまた次回!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索