2019年09月09日

ActiveBasicとDXライブラリでゲームプログラミング!~第11回・シューティングゲームを作ろう!その3

n88_reon.gif
玲音:どうも玲音です! さてさて、楓ちゃんに変なこと言われる前に、講座を始めていきましょう!
今回は、敵の表示と移動について説明していきますよ!

n88_kaede.gif
楓:先手打たれちゃったー。どうも、楓です。今日もよろしくお願いしますっ。

n88_reon.gif
ふふん、私だって、いつもやられてばかりじゃないよー。それじゃ初めていきましょう!


~敵に必要な変数は?~

n88_reon.gif
さて、まずは敵の移動や表示に関係する変数の定義から始めていこうか。
''メイン関数 の前のあたりに、次のコードを書いてね。

abdx1909-c01.JPG

n88_kaede.gif
あの、先輩。このeFlagって配列変数はなんですか?

n88_reon.gif
うん。それは、その番号の敵が出現しているかどうかを表すフラグだよ。これが1になってる敵だけを表示、移動させるようにするんだ。

n88_kaede.gif
なるほどー。

n88_reon.gif
それと、eFireTimeは、出現してから弾を発射するまでの時間。eTimeCntは出現してから経過した時間だよ。
eTimeCntがeFireTimeと同じになったら、弾を発射するようにする予定。

~敵を作ろう!~

n88_reon.gif
さて。それでは、まずは敵を出現させる処理から作っていこうか。でもその前に一つやっておかなくちゃならないことがあるの。わかる?

n88_kaede.gif
しなくちゃならないこと? うーん……。

n88_reon.gif
それは、まだ使われていない番号を探すこと。使われている番号を使ってしまうと、移動中の敵が、突然別のところに出現した!ってことになっちゃうでしょ?

n88_kaede.gif
あぁ、なるほどっ。

n88_reon.gif
ということでさっそく、使われていない敵の番号を探す関数、FindEmptyEnemyを作りましょう。これですっ!

abdx1909-c02.JPG

n88_reon.gif
といっても、やってることは前回作ったGetShotIDと同じだけどね。

n88_kaede.gif
ふむふむ。これを使って、見つけた番号に敵を作っていくわけですね!

n88_reon.gif
うん、その通り。それでは改めて、敵を作るサブプロシージャ『CreateEnemy』を作っていきましょう! とはいっても、やってることはCreateShotとほぼ同じだけどね。

abdx1909-c03.JPG

n88_reon.gif
出現するX座標と弾を発射するまでの間隔は、乱数(でたらめな数)で決めてるよ。dxGetRand関数は、0から()の中までの乱数を返すものだってことは、前の講座で話したよね。

n88_kaede.gif
はいっ。

n88_reon.gif
13行目の

eFireTime(id) = 40 + dxGetRand(20)

にも注目。
このような書き方をすることで、例えばこの例だと40から60までの乱数を取り出すことができるよ。

n88_kaede.gif
なるほどー。

n88_reon.gif
さて、次は移動と表示の処理も作っていこうか。と言っても、することは難しくないよ。For~Nextのループで敵の番号を回して、eFlagが1のものだけを移動、そして表示させてるだけ。そして移動の結果、敵が画面外に出たら、eFlagを0に戻してる、と。

n88_kaede.gif
ふむふむ。

n88_reon.gif
では、まずは画像の読み込みからやっていこうか。
サブプロシージャMaterialLoadに、次のコードを書いてね。

abdx1909-c04.JPG

abdx1909-r01.JPG
↑追加後のMaterialLoadはこうなります。(赤枠で囲まれたのが追加したところ)

n88_reon.gif
続いて、敵の移動を処理するサブプロシージャMoveEnemyだよ。

abdx1909-c05.JPG

n88_reon.gif
そして、こちらが敵の描画を処理するサブプロシージャDrawEnemy。やっているのが移動か描画の違いだけで、ほとんど、MoveEnemyと同じだけどね。

abdx1909-c06.JPG
n88_reon.gif
そして、この二つのサブプロシージャを実行し、さらに敵の出現の制御を行う、いわば上記二つのサブプロシージャの親玉というべきサブプロシージャ、EnemyMainだよ。

abdx1909-c07.JPG
n88_reon.gif
ここでは、MoveEnemyとDrawEnemyを呼び出す他にも、totalTimeをカウントアップして、30の倍数になるごとに、CreateEnemyを呼び出して敵を作ることもやっているよ。Mod演算子は、割った余りを計算する演算子なんだけど、このように使えば、一定の値ごとに処理を呼び出す処理を作ることができるんだ。

n88_kaede.gif
なるほどー。

n88_reon.gif
さて、ではこのEnemyMainサブプロシージャを、GameMainの中に組み込もう! GameMainの中に、次のコードを付け加えてね。

abdx1909-c08.JPG

abdx1909-r02.JPG
↑付け加えた後のGameMain。(赤枠内が追加されたコード)

n88_reon.gif
できたら実行してみて。

n88_kaede.gif
はーい。おおっ! 画面の上から敵キャラが下に移動していきますっ!

n88_reon.gif
では今回はここまで。次回は、弾を撃つ処理をやっていくよ。よろしくね!

==========

※次の更新は、『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!

posted by 裏編 at 09:08
"ActiveBasicとDXライブラリでゲームプログラミング!~第11回・シューティングゲームを作ろう!その3"へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。