玲音:こんにちは! 玲音です! ……あれ? 楓ちゃん、何か書いてるの?
楓:な、なんでもありませんよ! 見ないでくださいっ。
なになに……。「きょうもかえでは、せんぱいにこうざにひきずりこまれました」
もう、楓ちゃんったら~。
えへへ……。それで先輩。確か今回は、当たり判定をするんでしたよね?
うん、そうだよ。今回は、自機の弾と敵、自機と敵、自機と敵の弾の当たり判定を作って、当たった時に敵が消えたり、ゲームオーバーになったりする処理をやっていくよ。それじゃ、さっそく初めてみよう!
~関数を作ろう!
それじゃ、まずはモノとモノとの当たり判定を行う関数を作っていこう!
関数、ですか?
うん。そしてこの関数を、それぞれ(自機の弾と敵の時、自機と敵の時、自機と敵の弾の時)で使いまわすようにしていくんだ。そうすれば、処理がシンプルになるでしょ?
なるほどっ。さすが、私のこの講座に引きずり込んだ先輩ですっ。
だから、引きずり込んだんじゃないってばぁ……。こほん、それじゃ続いて、当たり判定の考え方ね。
まずはこの図をみて。
これが当たっている状態ね。これを見て、何か気づかないかな?
あっ! 当たっている状態というのは、中心同士の距離が、二つのものの幅の半分の合計より小さい状態なんですね!
そういうこと。こうなっているかどうか判定して、条件が成立したら、当たっているという判定を返せばいいんだよ。というわけで、それを関数にしたものがこちらです!
まず、p〇1とついているのは物体(自機や弾、敵など)1の位置や大きさの情報。p〇2とついてるのは物体2の情報だよ。
そして、まず12行目から16行目まで(赤枠の部分)では、各物体の中心の位置を計算しているよ。
そして18行目からがいよいよ本番。中心の間の距離と、幅(高さ)の半分の合計を計算し(青枠の部分)、そしてこれを比べて、当たっていれば、1を返し、そうでなければ0を返すようにしてるんだ(緑枠の部分)。
なるほどー。あ、先輩、このAbsっていうのはなんなんですか?
うん。それは、引数の絶対値を返す関数だよ。簡単に言うと、値のマイナスを取って返してくれるもの。
これを使わないと、比較するために、値が正の数かどうかチェックして、負の数だったら正の数に直す手間がかかるからね。
なるほどー。
さて、それじゃ、次はこの関数を使って行こう!
~関数を使おう!
まずは、自機の弾と敵との当たり判定ね。考え方は簡単。全ての自機弾と敵のデータをチェックして、双方ともある組み合わせの時のみ、判定の関数を呼び出して判定する、という形。というわけで、そのためのサブプロシージャがこちら!
続いて、自機と敵、自機と敵の弾の当たり判定だよ。こちらも考え方は、さっきと同じ。ただ、自機は一機しかいないし、自機に当たったらゲームオーバー画面に行くので、自機があるかどうかの判定はしてないところが違うの。
これができたところで、これらの関数をGameMainサブプロシージャに組み込もうか。次のコードをGameMainサブプロシージャに付け加えてね。
↑書き直した後のGameMainがこちら。(赤枠が追加した部分です)
なお今回は、ゲームオーバーの処理は作ってないから、敵や弾に当たったら画面が黒くなるだけになってる。そこらへんは次回にやっていくよ。では実行してみよう!
おー! こちらの弾で敵を倒せたり、弾や敵に当たったら画面が黒くなるようになりましたよ!
それでは今回はここまで。次回はいよいよラスト。スコアをいれたり、タイトルやゲームオーバー画面を入れたり、BGMを入れたりしていくよ。よろしくね!
==========
※次の更新は、『師匠TのチャレンジARSゲーム』の予定です。お楽しみに!