2019年11月11日

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

n88_reon.gif
玲音:こんにちは! 玲音です! ……あれ? 楓ちゃん、何か書いてるの?

n88_kaede.gif
楓:な、なんでもありませんよ! 見ないでくださいっ。

n88_reon.gif
なになに……。「きょうもかえでは、せんぱいにこうざにひきずりこまれました」
もう、楓ちゃんったら~。

n88_kaede.gif
えへへ……。それで先輩。確か今回は、当たり判定をするんでしたよね?

n88_reon.gif
うん、そうだよ。今回は、自機の弾と敵、自機と敵、自機と敵の弾の当たり判定を作って、当たった時に敵が消えたり、ゲームオーバーになったりする処理をやっていくよ。それじゃ、さっそく初めてみよう!

~関数を作ろう!

n88_reon.gif
それじゃ、まずはモノとモノとの当たり判定を行う関数を作っていこう!

n88_kaede.gif
関数、ですか?

n88_reon.gif
うん。そしてこの関数を、それぞれ(自機の弾と敵の時、自機と敵の時、自機と敵の弾の時)で使いまわすようにしていくんだ。そうすれば、処理がシンプルになるでしょ?

abdx1911-g01a.jpg

abdx1911-g01b.jpg

n88_kaede.gif
なるほどっ。さすが、私のこの講座に引きずり込んだ先輩ですっ。

n88_reon.gif
だから、引きずり込んだんじゃないってばぁ……。こほん、それじゃ続いて、当たり判定の考え方ね。
まずはこの図をみて。

abdx1911-g02.jpg

n88_reon.gif
これが当たっている状態ね。これを見て、何か気づかないかな?

n88_kaede.gif
あっ! 当たっている状態というのは、中心同士の距離が、二つのものの幅の半分の合計より小さい状態なんですね!

n88_reon.gif
そういうこと。こうなっているかどうか判定して、条件が成立したら、当たっているという判定を返せばいいんだよ。というわけで、それを関数にしたものがこちらです!

abdx1911-l01.jpg

n88_reon.gif
まず、p〇1とついているのは物体(自機や弾、敵など)1の位置や大きさの情報。p〇2とついてるのは物体2の情報だよ。
そして、まず12行目から16行目まで(赤枠の部分)では、各物体の中心の位置を計算しているよ。
そして18行目からがいよいよ本番。中心の間の距離と、幅(高さ)の半分の合計を計算し(青枠の部分)、そしてこれを比べて、当たっていれば、1を返し、そうでなければ0を返すようにしてるんだ(緑枠の部分)。

n88_kaede.gif
なるほどー。あ、先輩、このAbsっていうのはなんなんですか?

n88_reon.gif
うん。それは、引数の絶対値を返す関数だよ。簡単に言うと、値のマイナスを取って返してくれるもの。

n88_reon.gif
これを使わないと、比較するために、値が正の数かどうかチェックして、負の数だったら正の数に直す手間がかかるからね。

n88_kaede.gif
なるほどー。

n88_reon.gif
さて、それじゃ、次はこの関数を使って行こう!

~関数を使おう!

n88_reon.gif
まずは、自機の弾と敵との当たり判定ね。考え方は簡単。全ての自機弾と敵のデータをチェックして、双方ともある組み合わせの時のみ、判定の関数を呼び出して判定する、という形。というわけで、そのためのサブプロシージャがこちら!

abdx1911-l02.JPG

n88_reon.gif
続いて、自機と敵、自機と敵の弾の当たり判定だよ。こちらも考え方は、さっきと同じ。ただ、自機は一機しかいないし、自機に当たったらゲームオーバー画面に行くので、自機があるかどうかの判定はしてないところが違うの。

abdx1911-l03.JPG

abdx1911-l04.JPG

n88_reon.gif
これができたところで、これらの関数をGameMainサブプロシージャに組み込もうか。次のコードをGameMainサブプロシージャに付け加えてね。

abdx1911-l05.JPG

abdx1911-l06.jpg
↑書き直した後のGameMainがこちら。(赤枠が追加した部分です)

n88_reon.gif
なお今回は、ゲームオーバーの処理は作ってないから、敵や弾に当たったら画面が黒くなるだけになってる。そこらへんは次回にやっていくよ。では実行してみよう!




n88_kaede.gif
おー! こちらの弾で敵を倒せたり、弾や敵に当たったら画面が黒くなるようになりましたよ!

n88_reon.gif
それでは今回はここまで。次回はいよいよラスト。スコアをいれたり、タイトルやゲームオーバー画面を入れたり、BGMを入れたりしていくよ。よろしくね!

==========

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

この記事へのコメント
コメントを書く
コチラをクリックしてください